将集合绑定到堆栈面板

我想把一个对象集合绑定到一个 StackPanel 上,所以基本上如果这个集合有4个元素,那么在栈面板内应该会产生4个按钮。

我试过了... 但我不认为这是正确的方法。我过去曾使用 DataTemplate 来实现这种想法。.如果我错了,请纠正我。

这是我的假模特

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>

它确实可以绑定,但是我只有一个按钮,而不是4个按钮。

有什么想法吗?

67190 次浏览

Alright I have figured it out... Using an ItemsControl solved the problem...

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