InvalidCastException при изменении выбора в WPF TreeView - PullRequest
0 голосов
/ 15 сентября 2010

Для обработки события TreeView.SelectedItemChanged у меня есть прикрепленное поведение, которое привязывается к команде.

Обычно свойство RoutedPropertyChangedEventArgs.NewValue содержит ссылку на один из моих объектов модели представления, и я могузатем передайте это в качестве аргумента ICommand.CanExecute и ICommand.Execute.Я использую RelayCommand из здесь , но у меня есть RelayCommand<T>, который приводит к ожидаемому типу.

Однако в некоторых сценариях RoutedPropertyChangedEventArgs.NewValue содержит TreeViewItem, отображается как {System.Windows.Controls.TreeViewItem Header:{DisconnectedItem} Items.Count:0} в отладчике.

Это заставляет мой RelayCommand<T> выбросить InvalidCastException.

Вопрос: что это за таинственный TreeViewItem иоткуда оно взято?

Я знаю, что могу избежать исключения, изменив RelayCommand<T>.Execute с использования (T)value на value as T, но я хотел бы знать, чтоОсновная причина.

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

DisconnectedItem - это TreeViewItem, которого больше нет в вашем TreeView (т.е. он был удален из дерева).

0 голосов
/ 16 сентября 2010

Интересный;Вы делаете что-то необычное с деревом, как в шаблонах управления?Это фактическое встроенное древовидное представление или класс, который наследует его?Это может быть как-то связано с виртуализацией, но, как мне кажется, не должно происходить обычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...