gpt4 book ai didi

wpf - 使用不同的源对 TreeView 进行分组

转载 作者:行者123 更新时间:2023-12-04 19:49:04 25 4
gpt4 key购买 nike

我是 WPF 世界的新手,我正在尝试根据 MVVM 设计模式实现一个应用程序。我在使用 TreeView 时遇到了一些问题。

我的模型是一个日志消息列表(来自不同的应用程序),具有以下属性:消息、严重性、应用程序。我有一个包含 6 个项目的集合,它们属于两个不同的应用程序。我希望我的 TreeView 如下所示:

应用 A
错误
第一条错误消息 (aaa)
第二条错误信息 (bbb)
警告
第一条警告消息 (ccc)
应用程序 B
警告
第一条警告消息 (ddd)
信息
第一条信息消息 (eee)
第二信息消息 (fff)

我目前的理解是期望有一个带有子列表的项目,所以为了创建我想要的 View ,我需要创建一个列表,其中包含一个字符串(应用程序名称)和一个子列表(不同的严重性)将包含子列表(显示消息)。

这对我来说没有意义,因为我在我的 View 和我的模型之间创建了依赖关系,假设将来我需要添加另一个层次结构层,我需要更改我的数据结构以支持

有没有办法只使用一个具有不同分组的列表?

谢谢。

最佳答案

您可以使用 CollectionView 轻松地对数据进行分组,甚至可以采用嵌套方式:

ObservableCollection<LogEntry> data = new ObservableCollection<LogEntry>(new LogEntry[]
{
new LogEntry("App1", "Warning", "Msg1"),
new LogEntry("App1", "Error", "Msg2"),
new LogEntry("App1", "Warning", "Msg3"),
new LogEntry("App2", "Error", "Msg4"),
new LogEntry("App2", "Info", "Msg5"),
new LogEntry("App2", "Info", "Msg6"),
});
ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(data);
view.GroupDescriptions.Add(new PropertyGroupDescription("Application"));
view.GroupDescriptions.Add(new PropertyGroupDescription("Severity"));
Data = view;

(您也可以在 XAML 中创建 CollectionView View ,这只是一个示例)

现在您可以使用 DataTemplates 显示它:

<TreeView ItemsSource="{Binding Data.Groups}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type CollectionViewGroup}" ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:LogEntry}">
<TextBlock Text="{Binding Message}"/>
</DataTemplate>
</TreeView.Resources>
</TreeView>

看起来像这样:

关于wpf - 使用不同的源对 TreeView 进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5462713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com