2010-07-28 20 views
55

Nesnelerin bir koleksiyonunu almak ve StackPanel'e bağlamak istiyorum, yani koleksiyonun 4 unsuru varsa, yığın panelinin içinde 4 düğme üretmesi gerektiğini söyler.Bind Collection to StackPanel

Bunu denedim ... Ama yine de doğru yaklaşımını düşünmüyorum. Geçmişte bu tür bir fikir yapmak için DataTemplated'i kullandım. Lütfen yanılıyorsam beni düzeltin. İşte

benim sahte Böyle DataContext'i ayarlamak kodunda modeli

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

...

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

Ve xaml olan

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

IT bindim ama 4 düğme yerine sadece bir düğme aldım ....

Fikirler? Ben kullanarak ... bunu çözmüş olmasının

cevap

114

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

Bu benim ihtiyacım olan şeydi ... sorununu çözdü. Teşekkür ederim. – Trevor

+0

Her zaman gerekli değil, ancak bazı özelleştirmeler için StackPanel'de "IsItemsHost" özelliğini ayarlamanız gerekecek. – MatrixManAtYrService

+4

'ItemsSource' öğesini nerede ayarlıyorsunuz? Bu XAML bir "" ile mi sarılmış? – IAbstract