2010-09-15 5 views
0

Pour gérer l'événement TreeView.SelectedItemChanged, j'ai un comportement attaché qui se lie à une commande.InvalidCastException lorsque la sélection change dans un TreeView WPF

Habituellement, la propriété RoutedPropertyChangedEventArgs.NewValue contient une référence à l'un de mes objets de modèle de vue, et je peux ensuite passer cela en tant qu'argument à ICommand.CanExecute et ICommand.Execute. J'utilise de here, mais j'ai un RelayCommand<T> qui jette au type attendu.

Toutefois, dans certains scénarios, RoutedPropertyChangedEventArgs.NewValue contient un TreeViewItem, affiché sous la forme {System.Windows.Controls.TreeViewItem Header:{DisconnectedItem} Items.Count:0} dans le débogueur.

Cela provoque mon RelayCommand<T> à jeter un InvalidCastException.

Question: quel est ce mystérieux TreeViewItem et d'où vient-il?

Je suis conscient que je peux éviter l'exception en changeant RelayCommand<T>.Execute de l'utilisation (T)value à l'aide value as T, mais j'aimerais savoir ce que la cause racine est.

Répondre

1

A DisconnectedItem est un TreeViewItem qui n'est plus dans votre TreeView (à savoir qui a été retiré de l'arbre).

+0

OK. Une idée de pourquoi j'en vois une dans le gestionnaire d'événements SelectionChanged? –

0

Intéressant; faites-vous quelque chose hors de l'ordinaire avec l'arborescence, comme dans le templating de contrôle? Est-ce l'arborescence intégrée réelle ou une classe qui l'hérite? Cela pourrait avoir quelque chose à voir avec la virtualisation, mais cela ne devrait certainement pas se produire normalement, je pense.

+0

J'ai un '' et un '', mais je n'ai rien fait (encore) avec un template de contrôle. –

Questions connexes