Comment lier à la propriété SelectedItem de WPF TreeView?
J'ai adapté le Contrôle TreeView exemple de projet ici pour une utilisation avec Entity Framework objets. Il fonctionne à merveille, mais comme beaucoup d'autres de tenter de mettre à jour les collections ou les propriétés de leur ParentViewModels en fonction SelectedItem
changements, moi aussi, je suis incapable de combler le déficit de compréhension.
Je travaille dans MVVM, et que vous voulez mon code-behind gratuit de tout désordre. En tant que débutant, j'aime la propreté de la mise en œuvre de PropertyChanged
notifications mais depuis il leur est inhérent "SelectedItem" propriété de se lier à la TreeView
, je suis incapable de soulever mon événement PropertyChanged comme j'ai l'habitude avec les ListBox
.
Moi aussi, j'ai une propriété SelectedItem (qui fait une capture réussie de l'objet où isSelected = true) sur mon ChildViewModel (voir H. B. en réponse à cette question). J'ai aussi un SelectedItem de type ChildViewModel sur mon ParentViewModel qui est lié à mon point de Vue (voir @Martin Liversage post ici). Je ne parviens pas à synchroniser.
Merci de m'aider à comprendre comment communiquer la SelectedItem
propriété de mon ChildViewModel à mon ParentViewModel. Je n'ai pas lier mon TreeView pour un CollectionView
, donc je suis incapable d'obtenir le CurrentItem
dans la collection.
Mon viewmodel collections je m'occupe sont très requête-lourd, donc je n'ai pas compris tout le code pour l'instant. S'il vous plaît laissez-moi savoir ce qui est nécessaire pour plus de clarté.
OriginalL'auteur Rachael | 2013-03-06
Vous devez vous connecter pour publier un commentaire.
Donc, à moins que vous commencez à vous habituer à votre quotidien MVVM-WTF... "Pourquoi dois-je publier sur DONC pour des trucs de base comme cela". Un jour, vous allez adorer MVVM, je le promets 😉
Qui dit: Comme vous le savez, le TreeView ne prend pas en charge la synchronisation de l'
SelectedItem
de la propriété. Il existe, cependant, mais il est en lecture seule. Ce que vous voulez faire, est d'étendre le comportement de l'Arborescence de synchronisation de l'élément sélectionné à l'aide d'une propriété du ViewModel.Ce problème de la description des points dans la bonne direction: des Comportements. Les comportements (ou, pour être précis, le Système.De Windows.L'interactivité.Comportement<>s) vous permettent d'étendre les fonctionnalités de tout
DependencyObject
. (Bonne introduction)Une approche de synchroniser votre TreeView avec un élément sélectionné via les comportements, peuvent être trouvés ici:
Fil
Cela devrait faire pour vous déjà. Vous pouvez simplement copier et coller le code de Steve GreatRex et aller pour elle. S'il vous plaît commentaire, si vous avez besoin d'aide avec l'approche. Apprendre en s'amusant!
Pas de problème, j'espère que ça aide!
OriginalL'auteur Marc