Poignée modifiable des données hiérarchiques / TreeView~DataGrid hybride
Je suis à la recherche d'un contrôle WPF qui est un hybride de TreeView et DataGrid, quelque chose comme le débogueur de Visual Studio ou QuickBooks liste de contacts, etc.
Toute autre solution sur la façon de gérer modifiable des données hiérarchiques dans WPF sera très welcommed ainsi.
Vous devez vous connecter pour publier un commentaire.
Cela me semble être une assez simple de mettre en œuvre si la conception de votre modèle de vue correctement.
Vous dessiner les éléments de la même manière que vous le feriez si les afficher dans une normale de grille de données, c'est à dire que chaque élément a une propriété pour chaque colonne. Selon toute probabilité, votre sous-jacents au modèle de données hiérarchique, mais la collection que la grille est liée à la va être aplatie, c'est à dire contiendra un article pour chaque nœud de la hiérarchie, indépendamment de relations parent/enfant.
Le point de vue du modèle dispose de quelques propriétés supplémentaires:
Level
,Children
,IsExpanded
, etIsVisible
.Level
est un nombre de la du nœud ancêtres,Children
contient de l'enfant modèle d'affichage des nœuds,IsExpanded
est utilisé dans l'INTERFACE utilisateur, etIsVisible
est true si le nœud est visible. Il met également en œuvre une propriété appeléeVisibleDescendants
:Vous utilisez
Level
,HasChildren
, etIsExpanded
dans le style de l'élément dans le contrôle de la première colonne: ils contrôlent la marge de gauche et de quel type d'icône (le cas échéant) est affiché.Vous devez également mettre en œuvre
ExpandCommand
etCollapseCommand
propriétés. LeExpandCommand
est activé siChildren.Any()
est vrai etIsExpanded
est fausse, et leCollapseCommand
est activé siChildren.Any()
est vrai etIsExpanded
est vrai. Ces commandes, lorsqu'il est exécuté, modifier la valeur deIsExpanded
.Et c'est là que ça devient intéressant. La manière la plus simple à mettre en œuvre, cela peut fonctionner pour vous: les éléments sont exposés par un parent modèle de vue dont
Items
propriété n'est pas une collection. Au lieu de cela, il est un agent recenseur qui se déplace le long de la chaîne de l'enfant de voir les modèles et les rendements uniquement la partie visible de nœuds:Chaque fois qu'un descendant du
IsVisible
des modifications de la propriété, la vue parent modèle soulèvePropertyChanged
pour laItems
de la propriété, ce qui oblige la grille de données pour remplir de nouveau.Il y a de moins en moins simple de mise en œuvre trop, où vous faites la
Items
propriété d'une classe qui implémenteINotifyCollectionChanged
, et qui soulève le bonCollectionChanged
des événements lorsque les nœuds descendants devenir visible/invisible, mais vous ne voulez y aller, si la performance est un problème.Réponse suivante est développé à partir de @Robert Rossney réponse:
La classe ci-dessus est ce qu'il a expliqué.
Utiliser le
Data
objet dans leDataGridHierarchialDataModel
à placer dans vos propres données, et générer votre hierarchial données et le placer dansDataGridHierarchialData
sRawData
. AppelInitialize
quand tout est fait;^ C'était mon scénario, pour les Comptes de groupe
XAML :
C'est Gros 😛 mais croyez-moi, Robert Rossney idée est régalé 🙂
Aussi, expander '+', '-' Styles sont également inclus (commenté)
Espérons que cela aide 🙂
DataGridHierarchialDataModel
avec mon ViewModel de ce point de Vue, je suis la passation de la commande?juste un coup d'oeil à ce contrôle
http://www.codeproject.com/KB/WPF/wpf_treelistview_control.aspx
J'ai trouvé que la meilleure MVVM approche est possible avec cette commande: http://blogs.msdn.com/b/atc_avalon_team/archive/2006/03/01/541206.aspx
À utiliser avec vue hiérarchique des modèles, vous pouvez utiliser hiérarchique du modèle de données et modèle de vue guide à partir d'ici:
http://www.codeproject.com/Articles/24973/TreeListView
Façon la fin de cette partie, mais c'est ce que dit ce fil est active seulement il y a 2 mois. Je ne vois pas comment car aucun des commentaires date, qui a récemment mais je vous offre quand même parce que je viens de trouver ça et je voulais partager la réponse au cas où quelqu'un d'autre est à la recherche pour elle aussi.
J'ai trouvé ceci sur CodeProject - ce qui est tout enveloppé dans un joli joli petit package. Jusqu'à présent, semble fonctionner parfaitement. (ps: comment cela est-il pas normal WPF chose déjà? Je peux le faire en WinForms avec n'importe quel nombre de contrôles qui le font automatiquement)
Voici le lien - espérons que cela aide:
https://www.codeproject.com/Articles/1213466/WPF-TreeGrid-using-a-DataGrid