Où est IsSynchronizedWithCurrentItem propriété (ou l'équivalent) pour un TreeView?
J'ai un défaut de windows/explorateur de fichier de configuration.
- Côté gauche j'ai un TreeView toutes les données liées montrant des nœuds dans une hiérarchie
- Côté droit, j'ai une ListView montrant Nœud.Propriétés
ListView a un IsSynchronizedWithCurrentItem de la propriété, qui rochers. par exemple, Si j'avais un autre ListView montrant une liste de nœuds et deux listViews cette propriété a la valeur true. Modification de la sélection de noeud dans NodesListView sera mise à jour du PropertiesListView automatiquement.
Maintenant j'ai besoin de la même chose avec un NodesTreeView et un PropertiesListView... et il semble comme TreeView n'a pas cette propriété.
Est-il plus "le WPF façon" sorte de solution à ce problème ? Ou dois-je gérer la NodeSelectionChanged cas de l'Arbre et de l'actualisation de la liste via le code.
Vous devez vous connecter pour publier un commentaire.
Vraiment une solution simple est de lier votre "détails" des éléments de l'INTERFACE à la propriété SelectedValue de l'Arborescence. Par exemple, si votre TreeView ressemblait à ceci:
Ensuite, vous pouvez lier les détails des éléments de l'INTERFACE (comme une zone de texte) à l'aide de:
Serait la cause de la zone de texte à être lié à la propriété Name des éléments actuellement sélectionnés dans l'Arborescence.
Si vous souhaitez lier de nombreux éléments de l'UI comme les détails pour le TreeView point, envisager de mettre en place un DataContext sur le elemtent qui contient tous les détails des contrôles (DockPanel /Grille /StackPanel, etc).
Où "
.Modules
" est la collection de l'enfant sur le treeview sélectionné élément que vous souhaitez afficher. Ne vous inquiétez pas à propos de câblage des "SelectedItemChanged
" de l'événement sur le treeview.Exactement pourquoi il ne veut pas mettre en œuvre la propriété, je ne sais pas, mais j'ai une suggestion ci-dessous.
Votre code ci-dessus fonctionne, il n'est cependant pas ce que l'IsSynchronizedWithCurrentItem propriété. Tout ItemsControl se lie à la ICollectionView de la propriété ItemsSource. Pour obtenir cette ICollectionView, on peut appeler objet collectionviewsource.GetDefaultCollectionView(object o). Selon le type de l'objet o, vous obtenez une autre mise en œuvre concrète de l'interface ICollectionView. CollectionView et ListCollectionView sont deux classes concrètes qui viennent à l'esprit.
L'interface ICollectionView contient un membre appelé CurrentItem. Ce que le IsSynchronizedWithCurrentItem est la suivante: chaque fois qu'un élément est cliqué sur le ItemsControl, il définit la CurrentItem pour l'affichage de la collection. Le ICollectionView dispose également de deux événements: CurrentItemChanging et CurrentItemChanged. Lorsque le IsSynchronizedWithCurrentItem propriété est définie, le ItemsControl sera mise à jour du SelectedItem basé sur ce que le ICollectionView de CurrentItem est. Du sens?
En maître/détail WPF scénarios, nous ne sommes tout simplement la liaison à ICollectionViews et leur CurrentItem (CurrentItem syntaxe est quelque chose comme {Binding Articles/Nom}, où nom est le Nom de la propriété de la collection CurrentItem.
Donc bien que le code fonctionne pour vos besoins, il ne fait pas ce que cette propriété n'. Pour faire ce que la propriété est le cas, vous devez effectuer les opérations suivantes:
Maintenant, tout ce qui est lié à qui ICollectionView de CurrentItem sera mis à jour.
C'est devenu plus que ce que j'attendais. Laissez-moi savoir si toute précision supplémentaire est nécessaire.
Ma solution à ce s'est avéré être assez minuscule.. ne sais pas si c'est équivalent à IsSynchronizedWithCurrentItem. ListView actualise comme prévu.