WPF多个主/细节,相同的网格

时间:2009-09-11 11:43:09

标签: wpf grid master-detail

我有TreeView,有三个级别。

让我们说它是一个联盟,分区和团队TreeView

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

实现这一目标的最佳途径是什么?

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

然后,当您想要显示单个对象时,请使用ContentPresenter,如果SelectedItem,则将其内容绑定到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>

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

答案 1 :(得分:0)

我会创建一个viewmodel,其中包含树结构的属性,当前选择以及当前选择的详细信息。

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