如何为WPF TreeView设置DataTemplate以显示列表的所有元素?

我想在WPF中使用TreeViews可视化以下数据结构:

class MyDataContext { ICollectionView Outers {get;set;} //... } class Outer { string Name {get;set;} IEnumberable Actions {get;set;} } class Inner { string Description {get;set;} Command OnClick {get;set;} } 

这是我到目前为止的尝试:

                

因为我得到以下InvalidOperationException ,所以这次访问有问题:

 Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead. 

如果我删除内部TreeView,则没有exception(当然也没有按钮)。

我使用了Mateusz提到的页面( HierarchicalDataTemplate ),在阅读了这个问题的答案之后:将Collection绑定到StackPanel我找到了一个能够达到我想要的解决方案:

这里的球员(3级)与球队在同一排(2级):

                              

结果

请尝试将HierarchicalDataTemplate与TreeView一起使用。

HierarchicalDataTemplate

也许这对你有所帮助;)

xaml:

               

数据:

 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new MyDataContext(); } } class MyDataContext { public ObservableCollection Outers { get; set; } public MyDataContext() { Outers = new ObservableCollection(); Outers.Add(new Outer() { Name = "Herp" }); Outers.Add(new Outer() { Name = "Derp" }); } } class Outer { public string Name { get; set; } public ObservableCollection Actions { get; set; } public Outer() { Actions = new ObservableCollection(); Actions.Add(new Inner { Name = "Test1" }); Actions.Add(new Inner { Name = "Test2" }); Actions.Add(new Inner { Name = "Test3" }); Actions.Add(new Inner { Name = "Test4" }); Actions.Add(new Inner { Name = "Test5" }); Actions.Add(new Inner { Name = "Test6" }); Actions.Add(new Inner { Name = "Test7" }); } } class Inner { public string Name { get; set; } public ICommand OnClick { get; set; } } 

如果您正在使用命令…请尝试使用此示例: ICommand