Laden...

HierarchicalDataTemplate und CompositeCollections

Erstellt von Amosius vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.603 Views
A
Amosius Themenstarter:in
31 Beiträge seit 2010
vor 12 Jahren
HierarchicalDataTemplate und CompositeCollections

Hallo,

ich binde eine ObservableCollection<object> an eine TreeView in einem Dialog:

treeViewTarget.ItemsSource = multipleTreeViewTargetData;

Rufe ich diesen Dialog aus meinem Hauptfenster aus, so erhalte ich folgende Exception:

"Das angegebene untergeordnete Element muss vom aktuellen übergeordneten Visual-Objekt getrennt werden, bevor es an ein neues übergeordnetes Visual-Objekt angefügt wird."

Ist die Collection leer, kann ich den Dialog öffnen. Die Observable Collection die ich öffnen möchte ist bereits im Hauptfenster gebunden. Im Dialog selbst möchte ich daran nichts verändern, nur eben die Daten nochmals anzeigen. Liegt es am doppelten Binding oder wie kann ich mit der Collection umgehen?

Amosius

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

du hast da kein Binding! Das ist ne ganz normale Zuweisung und hat mit Binding nichts zu tun.

Baka wa shinanakya naoranai.

Mein XING Profil.

A
Amosius Themenstarter:in
31 Beiträge seit 2010
vor 12 Jahren

Hallo, ich habe weitere Einschränkungen vorgenommen.

Ich möchte eine TreeView mit folgendem Typeninhalt aufbauen.
Ich habe eine Collection mit 3 Subcollections verschiedenen Typs (wobei die Reihenfolge immer gleich ist). Der letzte der 3 Subcollections hat wiederrum 2 Collections.

Ich habe also folgende Struktur:

+Rootnodecollection (Type Root)
++Systemcollection (Type System)
++Documentcollection (Type Document)
++Foldercollection (Type Folder)
+++SystemCollection (Type System)
+++DocumentCollection (Type Document)

Jetzt versuche ich das ganze über HierarchicalTemplates aufzubauen und jeden Datentyp zu definieren.
In dem Datentyp Root definiere ich dass es 3 Subcollections gibt.
Die weiteren DataTemplates definieren wie diese angezeigt werden sollen.
Schaut dann so aus:

		<Grid.Resources>
		
            <HierarchicalDataTemplate DataType="{x:Type local:System}" >
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Path=Name}" />
                </StackPanel>                
            </HierarchicalDataTemplate>

            <HierarchicalDataTemplate DataType="{x:Type local:Document}" >
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Path=Name}" />
                </StackPanel>
            </HierarchicalDataTemplate>

            <HierarchicalDataTemplate DataType="{x:Type local:Folder}" >
			    <HierarchicalDataTemplate.ItemsSource>
                    <Binding>
                        <Binding.Source>
                            <CompositeCollection>
                                <CollectionContainer x:Name="FolderSystem" Collection="{Binding Path=Systems}" /> <!--Collection1 Type=local:System -->
                                <CollectionContainer x:Name="FolderDocument" Collection="{Binding Path=Documents}" /> <!--Collection1 Type=local:Document -->
                            </CompositeCollection>
                        </Binding.Source>
                    </Binding>
                </HierarchicalDataTemplate.ItemsSource>
                <TextBlock Text="{Binding Path=Text}" />
            </HierarchicalDataTemplate>
            
            <HierarchicalDataTemplate DataType="{x:Type local:Root}">
                <HierarchicalDataTemplate.ItemsSource>
                    <Binding>
                        <Binding.Source>
                            <CompositeCollection>
                                <CollectionContainer x:Name="MainSystems" Collection="{Binding Path=Systems}" /> <!--Collection1 Type=local:System -->
                                <CollectionContainer x:Name="MainDocuments" Collection="{Binding Path=Documents}" /> <!--Collection1 Type=local:Document -->
								<CollectionContainer x:Name="MainFolder" Collection="{Binding Path=Folder}" /> <!--Collection1 Type=local:Folder -->
                            </CompositeCollection>
                        </Binding.Source>
                    </Binding>
                </HierarchicalDataTemplate.ItemsSource>
                <TextBlock Text="{Binding Path=Name}" />
            </HierarchicalDataTemplate>
            
        </Grid.Resources>

        <TreeView 
            x:Name="multipleTreeViewTarget" 
            BorderBrush="Gray" 
            BorderThickness="1" >
            <TreeView.ItemsSource>
                <CompositeCollection>
                    <CollectionContainer x:Name="RootCollection" />
                </CompositeCollection>
            </TreeView.ItemsSource>
        </TreeView>

Bin ich da auf der richtigen Spur? Kann ich eine CompositeCollection in einem HierarchicalTemplate verwenden?

Amosius