XAML 将集合绑定到StackPanel

6psbrbz9  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(156)

我想把一个对象集合绑定到一个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个按钮,我只得到一个按钮。
想法?

iszxjhcz

iszxjhcz1#

好了,我想通了...用ItemsControl解决了问题...

<ItemsControl x:Name="tStack" ItemsSource="{Binding Items}">
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
         <StackPanel Orientation="Horizontal"/>
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
   <ItemsControl.ItemTemplate>
      <DataTemplate>
         <Button Content="{Binding ItemName}"/>
      </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

相关问题