代码之家  ›  专栏  ›  技术社区  ›  Gabe

将集合绑定到StackPanel

  •  61
  • Gabe  · 技术社区  · 16 年前

    我试过了…但我认为这不是正确的方法。我以前用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; }
       }
    }
    

    // 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 回复  |  直到 16 年前
        1
  •  156
  •   Gabe    16 年前

    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>