【问题标题】:Grouping data in WPF treeview在 WPF 树视图中对数据进行分组
【发布时间】:2011-03-16 20:26:22
【问题描述】:

我想创建一个带有两个分组选项(单选按钮)的 WPF TreeView。因此,数据将在 2 级层次结构中以两种不同的方式分组,最低级别是实际数据项,组只是一种表示数据以便于理解的方式。

他们还可以按组(复选框)选择项目,但我已经弄清楚了那部分,例如如果我想表示数据库对象并希望按模式或按对象类型(表、视图、函数等)对它们进行分组。

我只是不知道应该如何开始这两种分组模式。每当分组模式发生变化时,我应该完全重组我的ObservableCollection,还是有更直接的方法?

另外,如果我的第 2 级 DataTemplate 会因分组模式而略有不同,例如,当按对象类型分组时,您需要在第 2 级显示架构?

谁能给我一些关于如何开始和使用哪些技术的提示?

【问题讨论】:

    标签: c# wpf data-binding treeview observablecollection


    【解决方案1】:

    通过在 CollectionViewSource 上设置 GroupDescriptions 对您的收藏集进行分组。您可以通过执行以下操作在代码中执行此操作:

    CollectionViewSource.GetDefaultView(yourCollection).GroupDescriptions.Add(
        new PropertyGroupDescription("PropertyName"));
    

    或者您可以在 XAML 中通过显式创建 CollectionViewSource 来实现。

        <CollectionViewSource
            Source="{StaticResource yourCollection}"
            xmlns:dat="clr-namespace:System.Windows.Data;assembly=PresentationFramework">
            <CollectionViewSource.GroupDescriptions>
                <dat:PropertyGroupDescription PropertyName="PropertyName"/>
            </CollectionViewSource.GroupDescriptions>
        </CollectionViewSource>
    

    如果您使用的是 ListBox 之类的普通 ItemsControl,那么您只需设置 GroupStyle 属性即可。如果你想使用 TreeView,那么我想你想绑定到 ICollectionView 上的Groups 属性。你应该阅读 Bea Stollnitz 的关于分组的博客文章:

    【讨论】:

    • 很有趣,但我不确定我是否可以使用它。我需要在我的两个级别的项目前面的复选框,并且检查一个组应该检查所有子项目等。我现在用我的模型中的代码做到了这一点。另外,如果有办法解决这个问题,我仍然需要让 PropertyName 根据单选按钮的选择而变化,我认为这是无法做到的,因为它不是 DependencyProperty...
    • @Koen:您可以使用自定义转换器将复选框绑定到 CollectionViewGroup,该转换器检查每个子项。要更改分组,您可以在代码中进行,无论是在代码隐藏中还是在您的 ViewModel 中,或者您可以只拥有两个以不同方式分组的 CollectionViewSource,然后更改您将 TreeView 绑定到哪一个。
    • 两个链接都失效了。
    【解决方案2】:

    Check this linkHierarchicalDataTemplate。给出了将其与各种类型一起使用的示例。

    【讨论】:

    • 如果我选择重组我的整个 ObservableCollection,我确实会这样做。我只是觉得应该有一种更方便的技术,比如使用 LINQ 查询之类的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2010-11-12
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多