0

我有一个TreeView包含三个级别的。

可以说它是一个联赛,一个部门和一个团队TreeView

现在,当我选择树中的每个项目时,我想查看有关它的详细信息。

实现这一目标的最佳方法是什么?

由于Grid没有项目(如 a ListBox),我不能只设置它ItemsSource并制作DataTemplate...

我考虑过使用ListBox只包含所选项目的,但这似乎很糟糕......

谢谢。

4

2 回答 2

1

DataTemplate您首先为您的联赛、分区和团队类别定义 3 s。之后,将 绑定TreeView到对象的根目录。你的 League 和 Division 类应该有一个 Children 属性来返回孩子。你所有的类都应该有一个 Name 属性。

然后,当您要显示单个对象时,请使用ContentPresenter,并将其内容绑定到SelectedItemif TreeView

例如:

<StackPanel>
   <StackPanel.Resources>

       <DataTemplate DataType="{x:Type your_namespace:League}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

       <DataTemplate DataType="{x:Type your_namespace:Division}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

       <DataTemplate DataType="{x:Type your_namespace:Team}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

   </StackPanel.Resources>

   <TreeView x:Name="_tree" ItemsSource="{Binding RootOfYourItems}">
      <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text={Binding Name}/>
        </HierarchicalDataTemplate>
   </TreeView>

   <ContentPresenter Content="{Binding Path=SelectedItem, ElementName=_tree}" />

</StackPanel>

此代码未经测试或编译,仅作为示例提供。

于 2009-09-11T12:26:45.553 回答
0

我会创建一个视图模型,其中包含树结构的属性、当前选择和当前选择的详细信息。

树结构是单向绑定到树视图的,树视图中的 SelectedItem 是绑定到当前选择属性的 OneWayToSource(由于属性的限制)。一旦当前选择更改,此属性会更改子项列表,并且子项绑定到显示它们的列表框。

于 2009-09-11T11:49:42.963 回答