WPF中的TreeView绑定问题

WPF中的TreeView绑定问题,wpf,xaml,treeview,Wpf,Xaml,Treeview,考虑以下数据结构: List<Person> People; class Person { List<Car> Cars; List<Hobby> Hobbies; } 如何在XAML中实现这一点?以下是到目前为止我得到的信息: <TreeView> <TreeView.Resources> <DataTemplate x:Key="PersonTemplate"> <TextBl

考虑以下数据结构:

List<Person> People;
class Person { 
  List<Car> Cars; 
  List<Hobby> Hobbies;
}
如何在XAML中实现这一点?以下是到目前为止我得到的信息:

<TreeView>
  <TreeView.Resources>
    <DataTemplate x:Key="PersonTemplate">
      <TextBlock Header="{Binding Name}">
        <TextBlock.ContextMenu>
          <ContextMenu>
            <MenuItem Header="Remove" />
          </ContextMenu>
        </TextBlock.ContextMenu>
      </TextBlock>
    </DataTemplate>
  </TreeView.Resources>

  <TreeViewItem Header="{Binding Name}"IsExpanded="True" >
    <TreeViewItem Header="People" 
             ItemsSource="{Binding People}"
            ItemTemplate="{StaticResource PersonTemplate}">
    </TreeViewItem>
  </TreeViewItem>
</TreeView>


这是对

的后续问题这是开始使用MVVM进行treeview绑定的一个好方法:


你比我强:-)这是对表示和数据(模型)层的一个清晰抽象。实际上,我在生产代码中使用了Josh的示例,效果非常好。我同意,使用这个特定的示例确实让我觉得一切都很好。好吧,这看起来很有趣。我明天要做进一步的阅读。您是否建议使用如下视图模型:class PersonViewModel{object[]Items={new CarsViewModel(),new HobbiesViewModel()}?从而为我要显示的每个TreeItem创建一个ViewModel?
<TreeView>
  <TreeView.Resources>
    <DataTemplate x:Key="PersonTemplate">
      <TextBlock Header="{Binding Name}">
        <TextBlock.ContextMenu>
          <ContextMenu>
            <MenuItem Header="Remove" />
          </ContextMenu>
        </TextBlock.ContextMenu>
      </TextBlock>
    </DataTemplate>
  </TreeView.Resources>

  <TreeViewItem Header="{Binding Name}"IsExpanded="True" >
    <TreeViewItem Header="People" 
             ItemsSource="{Binding People}"
            ItemTemplate="{StaticResource PersonTemplate}">
    </TreeViewItem>
  </TreeViewItem>
</TreeView>