【问题标题】:WPF Multiple master/details, same gridWPF 多个主/详细信息,相同的网格
【发布时间】:2010-11-27 11:31:39
【问题描述】:

我有一个TreeView,它有三个级别。

假设它是一个联赛、分区和团队TreeView

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

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

由于Grid 没有项目(如ListBox),我不能只设置它的ItemsSource 并创建一个DataTemplate...

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

谢谢。

【问题讨论】:

    标签: wpf grid master-detail


    【解决方案1】:

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

    然后当你想显示单个对象时,使用ContentPresenter,如果TreeView,则将其内容绑定到SelectedItem

    例如:

    <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>
    

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

    【讨论】:

    • 谢谢,我不知道 ContentPresenter 的强大功能,让它工作了 :)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 2019-04-23
      • 2021-09-16
      • 2011-10-05
      • 2011-03-06
      • 1970-01-01
      相关资源
      最近更新 更多