2017-12-13 1 views
1

Ich möchte dynamisch eine Ansicht mit einem neuen Datagrid foreach Schlüssel in einem Wörterbuch erstellen. Ist es möglich, dies in XAML zu tun?Schleife durch Wörterbuchschlüssel in XAML? (WPF)

Mein Wörterbuch ist:
Wörterbuch < String, List < object>> Der Schlüssel der Titel des Wörterbuchs ist und die Liste der Objekt-Anzeige im Datenraster sein. Ich möchte einen Datagrid foreach Schlüssel in meinem Wörterbuch erzeugen.

Für exemple, wenn ich eine solche Einträge in meinem Wörterbuch haben:

<"Toto", [{"prop1":"tata", "prop2":"titi"}, {"prop1":"tata2", "prop2":"titi2"}]> 
<"Tutu", [{"prop1":"tatax", "prop2":"titix"}]> 

Ich möchte in meinem Programm anzuzeigen:

TOTO       TUTU 
-------------    -------------- 
Prop1 | Prop2    Prop1 | Prop2 
------|------    -------|------ 
tata | titi     tatax | titix 
tata2 | titi2 

In ASP.NET können Sie es mit einem tun @ foreach in der Mitte der Ansicht, aber wie kann ich es in XAML/WPF generieren?

+2

Verwenden Sie 'ItemsControl' mit entsprechenden ItemsPanel und ItemTemplate und binden ItemsSource an das Wörterbuch – ASh

+0

Haben Sie ein Beispiel? Ich kann das Datagrid auf meiner Objektliste direkt binden, aber ich weiß nicht, wie ich mit meinem Wörterbuch umgehen soll (und ich habe kein Beispiel gefunden) ... – Karakayn

+0

Dictionary implementiert IEnumerable von KeyValuePair. Der allgemeine Ansatz für ItemsControl ist hier anwendbar. Es gibt viele Beispiele für ItemsControl – ASh

Antwort

1

Hier ist der Code Arbeitscode, den ich mit Hilfe von @ASh und @ CelsoLívero gemacht habe, ich poste es einfach, um anderen Leuten zu helfen, wenn sie das gleiche Problem haben.

ich einen List<Tag> in Wert meines Wörterbuch haben, deshalb habe ich OneWay setzen müssen (weil es eine einzige Datagrid lesen ist, und es auf meine Bedürfnisse füllen), aber wenn jemand eine TwoWay Bindung haben wollen, müssen Sie Erstellen Sie eine ObservableCollection statt nur eine List.

<ItemsControl x:Name="itemControlTags" 
     ItemsSource="{Binding CurrentModuleItem.DicoTags}" 
     ScrollViewer.CanContentScroll="True" 
     ScrollViewer.VerticalScrollBarVisibility="Auto" 
     ScrollViewer.HorizontalScrollBarVisibility="Auto" 
     > 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Orientation="Horizontal" 
       Background="White" 
       Width="{Binding ActualWidth, ElementName=itemControlTags}" 
       Height="{Binding ActualHeight, ElementName=itemControlTags}" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding Key}"></TextBlock> 
       <DataGrid AutoGenerateColumns="True" 
        CanUserAddRows="False" 
        IsReadOnly="True" 
        CanUserDeleteRows="False" 
        Name="TagsDatagrid" 
        ItemsSource="{Binding Path=Value, Mode=OneWay}"> 
       </DataGrid> 
      </StackPanel> 

     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

Okay, jetzt markieren Sie die Antwort als korrekt, Herzlichen Glückwunsch –

+0

Ich werde, aber es heißt "Sie können Ihre eigene Antwort in 2 Tagen akzeptieren" so werde ich noch zwei Tage warten – Karakayn