Привязка коллекции к StackPanel
Я хочу взять коллекцию объектов и привязать ее к StackPanel, поэтому в основном, если коллекция имеет 4 элемента, внутри панели стека, которая должна производить 4 кнопки, скажем.
Я попытался это...Но я не думаю, что это правильный подход в любом случае. Я использовал DataTemplated, чтобы сделать этот тип идеи в прошлом.. пожалуйста, поправьте меня, если я ошибаюсь.
вот моя поддельная модель
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 кнопок я получаю только одну кнопку....
идеи?
1 ответ:
хорошо, я понял это... Используя
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>