Je veux prendre une collection d'objets et la lier à un StackPanel donc, fondamentalement, si la collection a 4 éléments, à l'intérieur du panneau de pile qui devrait produire 4 boutons, disons.
J'ai essayé ceci ... Mais je ne pense pas que ce soit la bonne approche de toute façon. J'ai utilisé DataTemplated pour faire ce type d'idée dans le passé. Veuillez me corriger si je me trompe.
Voici mon faux modèle
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; }
}
}
Dans le code, j'ai défini le DataContext comme ceci ...
// 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;
Et le xaml
<StackPanel x:Name="tStack">
<ItemsControl ItemsSource="{Binding Nodes}">
<ItemsControl.Template>
<ControlTemplate>
<Button Content="{Binding ItemName}"/>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
</StackPanel>
IL lie mais au lieu de 4 boutons je reçois seulement un bouton ....
Des idées?
D'accord, je l'ai compris ... L'utilisation d'un ItemsControl
a résolu le problème ...
<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>