2010-07-28 11 views
55

Quiero tomar una colección de objetos y vincularla a un StackPanel, así que, básicamente, si la colección tiene 4 elementos, dentro del panel de pila que debe producir 4 botones digamos.Enlazar Colección a StackPanel

Intenté esto ... Pero no creo que sea el enfoque correcto de todos modos. Usé DataTemplated para hacer este tipo de idea en el pasado ... por favor corrígeme si me equivoco.

Aquí es mi modelo falsa

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

En el código fijo el DataContext como esto ...

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

Y el xaml

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

TI se une, pero en lugar de 4 botones solo obtengo un botón ....

Ideas?

Respuesta

114

bien he dado cuenta ... El uso de un ItemsControl resuelto el problema ...

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

Esto era justo lo que necesitaba. Gracias. – Trevor

+0

No siempre es necesario, pero para algunas personalizaciones adicionales deberá establecer la propiedad "IsItemsHost" en StackPanel. – MatrixManAtYrService

+4

¿Dónde configura 'ItemsSource'? ¿Este XAML está envuelto en un ''? – IAbstract

Cuestiones relacionadas