|
3 / 3 / 0
Регистрация: 23.12.2016
Сообщений: 273
|
|
Binding к вложенным свойствам (ко свойству базового класса), ошибка: "Ключ не может быть неопределенным. Имя параметра: key"15.06.2025, 17:23. Показов 3863. Ответов 42
Здравствуйте, есть базовый класс, от которого унаследованы 2 других, и в базовом есть 1 свойство , которое должно присутствовать в 2-х наследниках и во время работы приложения изменяться. Но возникает ошибка:
System.ArgumentNullException: "Ключ не может быть неопределенным. Имя параметра: key" Кликните здесь для просмотра всего текста
"at System.Collections.Specialized.HybridDic tionary.get_Item(Object key)\r\n at System.ComponentModel.PropertyChangedEve ntManager.AddListener(INotifyPropertyCha nged source, String propertyName, IWeakEventListener listener, EventHandler`1 handler)\r\n at System.ComponentModel.PropertyChangedEve ntManager.AddHandler(INotifyPropertyChan ged source, EventHandler`1 handler, String propertyName)\r\n at MS.Internal.Data.PropertyPathWorker.Repl aceItem(Int32 k, Object newO, Object parent)\r\n at MS.Internal.Data.PropertyPathWorker.Upda teSourceValueState(Int32 k, ICollectionView collectionView, Object newValue, Boolean isASubPropertyChange)\r\n at MS.Internal.Data.ClrBindingWorker.Attach DataItem()\r\n at System.Windows.Data.BindingExpression.Ac tivate(Object item)\r\n at System.Windows.Data.BindingExpression.At tachToContext(AttachAttempt attempt)\r\n at System.Windows.Data.BindingExpression.MS .Internal.Data.IDataBindEngineClient.Att achToContext(Boolean lastChance)\r\n at MS.Internal.Data.DataBindEngine.Task.Run (Boolean lastChance)\r\n at MS.Internal.Data.DataBindEngine.Run(Obje ct arg)\r\n at MS.Internal.Data.DataBindEngine.OnLayout Updated(Object sender, EventArgs e)\r\n at System.Windows.ContextLayoutManager.fire LayoutUpdateEvent()\r\n at System.Windows.ContextLayoutManager.Upda teLayout()\r\n at System.Windows.ContextLayoutManager.Upda teLayoutCallback(Object arg)\r\n at System.Windows.Media.MediaContext.Invoke OnRenderCallback.DoWork()\r\n at System.Windows.Media.MediaContext.FireIn vokeOnRenderCallbacks()\r\n at System.Windows.Media.MediaContext.Render MessageHandlerCore(Object resizedCompositionTarget)\r\n at System.Windows.Media.MediaContext.Render MessageHandler(Object resizedCompositionTarget)\r\n at System.Windows.Media.MediaContext.Resize (ICompositionTarget resizedCompositionTarget)\r\n at System.Windows.Interop.HwndTarget.OnResi ze()\r\n at System.Windows.Interop.HwndTarget.Handle Message(WindowMessage msg, IntPtr wparam, IntPtr lparam)\r\n at System.Windows.Interop.HwndSource.HwndTa rgetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)\r\n at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)\r\n at MS.Win32.HwndSubclass.DispatcherCallback Operation(Object o)\r\n at System.Windows.Threading.ExceptionWrappe r.InternalRealCall(Delegate callback, Object args, Int32 numArgs)\r\n at System.Windows.Threading.ExceptionWrappe r.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)\r\n at System.Windows.Threading.Dispatcher.Lega cyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)\r\n at MS.Win32.HwndSubclass.SubclassWndProc(In tPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)" string Я понимаю, что ошибка связанна с биндингом, но никак не могу понять причины, что сделано не так. в базовом классе реализовано свойство и интерфейс INotifyPropertyChanged (если убираю наследование от этого интерфейса все ок, ошибки нет, то и соответственно обновлений). пока нашел выход из ситуации CollectionViewSource.GetDefaultView(TableRows).Refresh(); , но думаю это не корректно в рамках WPF, когда есть binding.Архив прикладываю. Или вообще нельзя корректно настроить binding к вложенным свойствам (свойству базового класса)?
0
|
|
| 15.06.2025, 17:23 | |
|
Ответы с готовыми решениями:
42
Ошибка при обновлении данных "Значение не может быть неопределенным. Имя параметра: dataTable" Внешняя сортировка и ошибка "Значение не может быть неопределенным. Имя параметра: String"
|
|
Модератор
|
||
| 16.06.2025, 23:17 | ||
|
Провозился час, но не смог понять причину исключения. Нет больше времени с этим сегодня разбираться. Если может, то помогите IIIIIIIIIgor.
0
|
||
|
|
||||||||||||||||
| 17.06.2025, 09:01 | ||||||||||||||||
|
IIIIIIIIIgor, Вот этот метод не отрабатывает
Значит что-то тут вы навертели
0
|
||||||||||||||||
|
3 / 3 / 0
Регистрация: 23.12.2016
Сообщений: 273
|
||
| 17.06.2025, 09:05 [ТС] | ||
|
1 раз туда влетает null и возвращается null, потом происходит снова входит в этот метод, но уже с типом vm, и возвращается нужный шаблон. ошибка возникает после 2 вхождения в этот метод. если убрать реализацию INPC то точно так же первый раз туда приходит null, но никаких ошибок нет и все биндинги отрабатывают. Попробуйте в отладке пройти дальше, после того как в первый раз туда придет null и увидите, что ошибка возникает намного позже и не из-за этого
0
|
||
|
|
||||||||||||
| 17.06.2025, 09:25 | ||||||||||||
|
IIIIIIIIIgor, Инициализировать item нужно до вызова селектора. Попробуйте запустить их через DI и потом уже использовать.
Добавлено через 3 минуты Добавлено через 2 минуты IIIIIIIIIgor, И вот этот метод по дефолту возвращает null
IIIIIIIIIgor,
0
|
||||||||||||
|
3 / 3 / 0
Регистрация: 23.12.2016
Сообщений: 273
|
|||
| 17.06.2025, 09:42 [ТС] | |||
|
0
|
|||
|
|
|||
| 17.06.2025, 09:47 | |||
|
IIIIIIIIIgor,
0
|
|||
|
3 / 3 / 0
Регистрация: 23.12.2016
Сообщений: 273
|
||||||||
| 17.06.2025, 10:25 [ТС] | ||||||||
|
хорошо. сделал вот так: в класс окна (код-бихаинд) добавил перед инициализацией в контекст вм
TableRowTemplateSelector в метод public override DataTemplate SelectTemplate(object item, DependencyObject container) item сразу передается моя vm (не null) с первого раза не null.и ошибка осталась точно такая же. Тот null при первом обращении в селектор никак не влияет на ошибку попробуйте в коде вот это изменить и вы увидите null нет, ошибка есть
0
|
||||||||
|
|
||||
| 17.06.2025, 10:45 | ||||
|
Добавлено через 9 минут IIIIIIIIIgor,
0
|
||||
|
3 / 3 / 0
Регистрация: 23.12.2016
Сообщений: 273
|
||
| 17.06.2025, 10:46 [ТС] | ||
|
Опять же я сделал чтобы не было null , и ошибка та же самая сохранилось. снова повторяю, первый раз null в селекторе никаким боком не влияет на ошибку. у меня складывается впечатление, что мои сообщения не читаются. просто зацепились за ни в чем не повинный null и все. Не помогло убрать null из селектора. даже если он сразу возвращает нужный шаблон, ошибка осталась та же самая
0
|
||
|
Модератор
|
||||||||
| 17.06.2025, 11:15 | ||||||||
null для DataTemplateSelector.SelectTemplate - это нормальное поведение.Я не помню чтобы у меня где-то проблемы с этим возникали. Вечером специально протестирую. Добавлено через 11 минут Вчера очень поздно домой вернулся после ![]() И не смог нормально погрузиться в тестировании.
Если убрать коммент public class TableRowObject : INotifyPropertyChanged, то выкидывается исключение.К работе DataTemplateSelector это не имеет отношения, так как для свойств класса TableRowObject он не вызывается.
0
|
||||||||
|
|
|||||||
| 17.06.2025, 11:40 | |||||||
0
|
|||||||
|
|
||||||
| 17.06.2025, 11:48 | ||||||
|
Элд Хасп, Стек вызовов такой же...
0
|
||||||
|
|
||||||
| 17.06.2025, 12:32 | ||||||
|
Элд Хасп, Какой-то бред... Свойство объекта меняется (INPC), объект о своём изменении уведомляет (INPC). Чего ему не хватает...
Добавлено через 32 минуты Мне кажется всё дело вот этом хитром объявлении привязки...
0
|
||||||
|
Модератор
|
|||
| 17.06.2025, 12:56 | |||
|
Меня самого это в недоумение поставило. Поэтому вчера и не смог сам быстро разобраться. А днём на работе у меня нет компа со Студией. Добавлено через 3 минуты Попробуй изменить на "{Binding VObject.ExistingCards,Полный синтаксис свойства добавлен чтобы не было предупреждений в дизайнере об ошибках привязки. Я так делаю иногда, но первый раз наталкиваюсь на подобное исключение.
0
|
|||
|
3 / 3 / 0
Регистрация: 23.12.2016
Сообщений: 273
|
||||||||
| 17.06.2025, 13:05 [ТС] | ||||||||
VObject убрать наследование от INPCвот при таком классе исключения нет, если раскоментировать наследование от INPC исключение появляется
{Binding VObject.ExistingCards появление ошибки сохраняется
0
|
||||||||
|
|
|
| 17.06.2025, 13:45 | |
|
IIIIIIIIIgor, Элд Хасп, Просто никто из нас не сталкивался с наследованием INPC, не считая базового класса VM, но тут поведение без наследуемых свойств... И вот теперь обнаружился вот такой штука со свойствами базового класса...
0
|
|
|
|
|||
| 17.06.2025, 15:26 | |||
|
Если так, то оно конечно сильно заморочено... И про такой нюанс в описании интерфейса нету ничего... Но там есть вот такое замечание
0
|
|||
|
Модератор
|
|||||||||||||||||
| 17.06.2025, 21:45 | |||||||||||||||||
Сообщение было отмечено IIIIIIIIIgor как решение
РешениеДобавлено через 28 минут IIIIIIIIIgor, всё оказалось банальнее. Для полного синтаксиса свойств в пути привязки надо явно задавать Path. То есть, если на Шарпе, вот такие привязки не всегда одно и тоже:
VObject.(models:VObject1.ExistingCards) привязка будет такой:
Да, чёрт его знает. Это особенность анализатора XAML. Не вижу каких-то проблем чтобы в XAML всегда анализатор вызывал дефолтную перегрузку Binding и передавал путь в свойство Path. Но сделано по иному. Какие аргументы у разработчику в пользу такой неоднозначности - не представляю. Добавлено через 2 минуты Собственно ответ на вопрос. Надо во все привязки с полным синтаксисом добавить задание значения Path.
2
|
|||||||||||||||||
| 17.06.2025, 21:45 | |
|
Порядок записи полей базового и производного классов, почему сначала производного а потом базового, ведь должно быть наоборот ? Ошибка: Параметр типа значения ByRef не может быть неопределенным Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи.
. . .
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|