绑定collections到StackPanel

我想要一个对象的集合,并绑定到一个StackPanel,所以基本上,如果集合有4个元素,在应该产生4个button的堆栈面板里可以说。

我试过这个…但是我不认为它是正确的方法。 我使用DataTemplated在过去做这种types的想法..请纠正我,如果我错了。

这是我的假模型

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; } } } 

在代码中,我设置DataContext像这样…

 // 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; 

和XAML

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

IT绑定,而不是4个button,我只能得到一个button….

想法?

好吧,我已经想通了…使用ItemsControl解决了问题…

 <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>