2010-09-15 25 views
0

要处理TreeView.SelectedItemChanged事件,我有一个绑定到命令的附加行为。InvalidCastException当WPF TreeView中的选择更改时

通常,RoutedPropertyChangedEventArgs.NewValue属性包含到我的视图模型对象中的一个基准,然后我可以通过这个上作为参数ICommand.CanExecuteICommand.Execute。我使用RelayCommandhere,但我有一个RelayCommand<T>转换为预期的类型。

但是,在某些情况下,RoutedPropertyChangedEventArgs.NewValue包含TreeViewItem,在调试器中显示为{System.Windows.Controls.TreeViewItem Header:{DisconnectedItem} Items.Count:0}

这会导致我的RelayCommand<T>抛出InvalidCastException

问题:这是什么神秘的TreeViewItem和它从哪里来的?

我知道,我能避免使用(T)value使用value as T改变RelayCommand<T>.Execute例外,但我想知道的根本原因是什么。

回答

1

DisconnectedItem是TreeViewItem不再在您的TreeView中(即已从树中删除)。

+0

OK。任何想法为什么我在SelectionChanged事件处理程序中看到一个? – 2010-09-15 14:15:28

0

有趣;你是否像对照模板一样用树视图来做任何不寻常的事情?它是实际的内置树视图还是继承它的类?它可能与虚拟化有关,但它绝对不应该发生在我认为的正常情况下。 OK。

+0

我有一个''和一个'',但我还没有做任何事情(但)与控制模板。 – 2010-09-20 10:45:16