如何将对象绑定到Xaml的树视图

时间:2012-11-13 21:52:26

标签: c# wpf xaml treeview caliburn.micro

我正在尝试通过XAML将对象绑定到treeviewcontrol WPF,我将treview视为空。当我通过treeview.items.add(GetNode())进行此操作时,它正在工作。

我正在使用MVVM Framework(caliburn.Micro)我想在Xaml中实现它,如何在xaml中分配Item source属性?我尝试创建Node类的属性并在属性中调用Method GetNode(),并将该属性指定为treeview的itemssource并将List更改为Observable集合。问题仍然存在。

在执行返回节点的treeview.items.Add(GetNode())时使用Xaml,并将i作为将节点集合分配给Hireachial模板。

<TreeView  Name="treeview2" 
            Grid.RowSpan="2"
            Grid.ColumnSpan="2"
            ItemContainerStyle="{StaticResource StretchTreeViewItemStyle}" Width="300">
            <TreeView.ItemTemplate>
                 <HierarchicalDataTemplate  ItemsSource="{Binding Nodes}">
                      <DockPanel LastChildFill="True">
                          <TextBlock  Padding="15,0,30,0" Text="{Binding Path=numitems}" TextAlignment="Right" 
    DockPanel.Dock="Right"/>
                          <TextBlock  Text="{Binding Path=Text}" DockPanel.Dock="Left" TextAlignment="Left" />
                      </DockPanel>
                 </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
  </TreeView>

服务器端代码:

this.treeview2.Items.Add(GetNode());

GetNode以递归方式构建Node类型列表。

public class Node
{
    public string Text { get; set; }
    public List<Node> Nodes { get; set; }
    public ObservableCollection<Node> Nodes{get;set;} // with list and observable collection same results
    public int numitems { get; set; }
}

1 个答案:

答案 0 :(得分:1)

除了HierarchicalDataTemplate,看起来还不错,添加一个绑定到TreeView的ItemsSource属性:

public class ViewModel
{
   private List<Node> _rootNodes;
   public List<Node> RootNodes 
   {
     get
     {
       return _rootNodes;
     }
     set
     {
       _rootNodes = value;
       NotifyPropertyChange(() => RootNodes);
     }
   }

   public ViewModel()
   {
      RootNodes = new List<Node>{new Node(){Text = "This is a Root Node}", 
                                 new Node(){Text = "This is the Second Root Node"}};
   }

在XAML中:

<TreeView ItemsSource="{Binding RootNodes}"
          .... />

编辑:删除执行this.Treeview....您不需要的电话。尽量将参考UI元素的代码量保持在最低限度。您可以使用绑定执行所有操作,而无需在代码中操作UI元素。