TreeView,HierarchicalDataTemplate和递归数据
对于我的treeview,我有两个提供ItemsSource的不同类。
public class TreeViewModel : ViewModelBase { public ObservableCollection Items { get; set; } } public class NodeViewModel : ViewModelBase { public string Id { get; set; } public string Name { get; set; } public ObservableCollection Children { get; set; } }
现在我希望我的TreeView在TreeViewModel中显示Items并显示NodeViewModel提供的分层数据。
这是我的XAML
试图提供Items
作为TreeView
的ItemsSource
。 如果显示任何内容,它不会按层次结构显示数据。
我也尝试使用ItemTemplate
而不是TreeView.Resources
。
怎么了?
也许问题是第一个TextBlock Text Binding
? 我想在那里的Items
显示NodeViewModel
的Name
属性。
正如@ sa_ddam213所说,你只需要NodeViewModel
的HierarchicalDataTemplate
,但你的代码唯一的问题是数据模板定义中DataType="x:Type local:TreeViewModel"
缺少大括号( {
和}
)(它应该是DataType="{x:Type local:TreeViewModel}"
)。 添加括号和ItemsSource
绑定解决了这个问题:
不使用TreeViewModel
的附加HierarchicalDataTemplate
,但它不会造成伤害。
您只需要为NodeViewModel
声明HierarchicalDataTemplate
,因为这是TreeView
唯一显示的内容,并将实际的ItemSource
绑定到TreeView
完整的例子
XAML:
码:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public TreeViewModel TreeModel { get { return new TreeViewModel { Items = new ObservableCollection{ new NodeViewModel { Name = "Root", Children = new ObservableCollection { new NodeViewModel { Name = "Level1" , Children = new ObservableCollection { new NodeViewModel{ Name = "Level2"}}} } }} }; } } } public class TreeViewModel { public ObservableCollection Items { get; set; } } public class NodeViewModel { public string Id { get; set; } public string Name { get; set; } public ObservableCollection Children { get; set; } }
结果:
- Web服务方法返回Response对象而不是自定义对象
- 如何访问ThisAddIn类之外的VSTO Outlook加载项中的Application属性?
- APDU命令获取智能卡的序列号
- WCF返回ArrayOfKeyValueOfintstringKeyValueOfintstring 而不是List 和List instread of List
- XslCompiledTransform使用UTF-16编码
- 来自IP cam C#的流
- System.Collections.Generic.Dictionary =终极表现?
- 我可以通过引用传递参数的函数/方法和在C ++中通过值传递的重载吗?
- FileDialog.RestoreDirectory属性实际上做了什么?