Griff editierbaren hierarchischen Daten / TreeView~DataGrid-hybrid
Ich bin auf der Suche nach einem WPF-Steuerelement, das ist eine Mischung aus Baum-und DataGrid, so etwas wie der Visual Studio debugger oder QuickBooks Kontaktliste etc.
Jede andere Lösung, wie man mit editierbaren hierarchischen Daten in WPF sehr welcommed als gut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mir scheint das wie eine relativ einfach Sache zu implementieren, wenn Sie Ihre design-Ansicht Modell richtig.
Dass Sie im Grunde design-Elemente die gleiche Weise würden Sie, wenn die Anzeige in einem normalen Daten-grid, D. H. jedes Element hat eine Eigenschaft für jede Spalte. Aller Wahrscheinlichkeit nach, Ihre zugrunde liegende Datenmodell ist hierarchisch aufgebaut, aber die Sammlung, die durch das raster gebunden ist, wird abgeflacht werden, d.h. enthalten einen Eintrag für jeden Knoten in der Hierarchie unabhängig von parent - /child-Beziehungen.
Der item view-Modell hat einige zusätzliche Eigenschaften:
Level
,Children
,IsExpanded
, undIsVisible
.Level
ist die Anzahl der Knoten von seinen VorfahrenChildren
enthält die child-view-Modell-KnotenIsExpanded
ist die auf der Benutzeroberfläche verwendet, undIsVisible
ist wahr, wenn der Knoten sichtbar ist. Es implementiert auch eine Eigenschaft namensVisibleDescendants
:Verwenden Sie
Level
,HasChildren
, undIsExpanded
im Stil für das Element in der Steuerung der ersten Spalte: Sie Steuern den linken Rand, und welche Art von Symbol (wenn vorhanden) angezeigt.Müssen Sie auch umsetzen
ExpandCommand
undCollapseCommand
Eigenschaften. DieExpandCommand
ist aktiviert, wennChildren.Any()
wahr ist undIsExpanded
falsch ist, und derCollapseCommand
ist aktiviert, wennChildren.Any()
wahr ist undIsExpanded
wahr ist. Diese Befehle, wenn Sie ausgeführt, ändern Sie den Wert vonIsExpanded
.- Und hier wird es interessant. Der einfache Weg um dies zu implementieren, kann für Sie arbeiten: den Elementen ausgesetzt sind, durch eine übergeordnete Sicht auf das Modell, dessen
Items
Eigenschaft ist nicht eine Sammlung. Stattdessen, es ist ein enumerator, wandert die Kette der untergeordneten Ansicht Modellen und Erträge werden nur die sichtbaren Knoten:Werden, wenn irgendein Abkömmling der
IsVisible
Eigenschaft geändert wird, wird die übergeordnete Ansicht Modell hebtPropertyChanged
für dieItems
Eigenschaft, die Kräfte der Daten-grid zu bevölkern.Gibt es eine weniger einfache Implementierung zu, wo Sie die
Items
Eigenschaft einer Klasse, dieINotifyCollectionChanged
, und das wirft das richtigeCollectionChanged
Ereignisse, die bei untergeordneten nodes sichtbar/unsichtbar, aber Sie nur gehen, wenn die Leistung ein Problem ist.Folgende Antwort entwickelt von @Robert Rossney Antwort:
Der obigen Klasse ist, was er erklärt.
Verwenden Sie die
Data
Objekt in derDataGridHierarchialDataModel
auf die eigenen Daten und das generieren der hierarchischen Daten und inDataGridHierarchialData
sRawData
. Rufen SieInitialize
wenn alles fertig;^ Das war mein Szenario, um Gruppen-Accounts
XAML :
Thats Groß 😛 aber Vertrauen Sie mir, Robert Rossney die Idee ist ein Knaller 🙂
Auch, expander,'+', ' - ' - Stile sind ebenfalls enthalten (auskommentiert)
Hoffe es hilft 🙂
DataGridHierarchialDataModel
mit meinem ViewModel-gleich welcher Ansicht ich bin Platzierung die Kontrolle?werfen Sie einen Blick auf dieses Steuerelement
http://www.codeproject.com/KB/WPF/wpf_treelistview_control.aspx
Habe ich festgestellt, dass der beste MVVM-Ansatz ist es möglich mit dieser Steuerung: http://blogs.msdn.com/b/atc_avalon_team/archive/2006/03/01/541206.aspx
Zur Verwendung mit hierarchischen Modelle anzeigen, können Sie hierarchische Daten-Vorlage-und-Sicht-Modell-Anleitung von hier:
http://www.codeproject.com/Articles/24973/TreeListView
So spät zu dieser party, aber SO steht es in diesem thread aktiv war, vor nur 2 Monaten. Ich sehe nicht, wie da keiner der Kommentare Datum, das vor kurzem - aber ich biete es trotzdem, weil ich es gerade gefunden und wollte die Antwort im Fall, jemand ist auf der Suche für Sie als gut.
Fand ich diese auf CodeProject - die alle eingewickelt in einem schönen gepflegten kleinen Paket. So weit, scheint zu funktionieren einwandfrei. (und ps: wie ist das nicht eine normale WPF-Ding schon? Ich kann es in WinForms mit einer beliebigen Anzahl von Steuerelementen, die es automatisch tun)
Hier ist der link - hoffe es hilft:
https://www.codeproject.com/Articles/1213466/WPF-TreeGrid-using-a-DataGrid