it-swarm.com.de

Sammlung an StackPanel binden

Ich möchte eine Auflistung von Objekten nehmen und an ein StackPanel binden. Wenn die Auflistung also 4 Elemente enthält, kann man sagen, dass innerhalb des Stack-Bedienfelds 4 Schaltflächen erstellt werden sollen.

Ich habe es versucht ... Aber ich glaube nicht, dass es der richtige Ansatz ist. Ich habe in der Vergangenheit DataTemplated verwendet, um diese Art von Idee zu verwirklichen. Bitte korrigieren Sie mich, wenn ich falsch liege.

Hier ist mein falsches Modell

public class MockModel
{
   public ObservableCollection<MockNode> Nodes;

   public MockModel()
   {
      Nodes = new ObservableCollection<MockNode>();
   }
}

public class MockNode
{
   public MockNode()
   {
   }

   private string itemname;
   public string ItemName
   {
      get { return this.itemname; }
      set { this.itemname = value; }
   }
}

Im Code setze ich den DataContext so ...

// Init Model
MockModel myModel = new MockModel();

for (int i = 0; i < 4; i++)
{
   MockNode mn = new MockNode();
   mn.ItemName = String.Format("Node {0}", i);
   myModel.Nodes.Add(mn);
}
// Set DataContext for StackPanel
Stack.DataContext = myModel.Nodes;

nd das xaml

<StackPanel x:Name="tStack">
   <ItemsControl ItemsSource="{Binding Nodes}">
      <ItemsControl.Template>
         <ControlTemplate>
            <Button Content="{Binding ItemName}"/>
         </ControlTemplate>
      </ItemsControl.Template>
   </ItemsControl>
</StackPanel>

ES bindet, aber anstelle von 4 Knöpfen bekomme ich nur einen Knopf ....

Ideen?

63
Gabe

Okay, ich habe es herausgefunden ... Mit einem ItemsControl das Problem gelöst ...

<ItemsControl x:Name="tStack" Grid.Column="0">
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
         <StackPanel Orientation="Horizontal"/>
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
   <ItemsControl.ItemTemplate>
      <DataTemplate>
         <Button Content="{Binding ItemName}"/>
      </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>
139
Gabe