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