SuperAPI AI 工具集

managing-wpf-collectionview-mvvm

通用与其它

查看项目

更新于 10-15 20:12

技能介绍

用途:解决同一源集合需在多个视图中按不同条件筛选、排序或分组,同时遵守 MVVM 原则的问题。核心原则是 ViewModel 不引用 WPF 相关程序集,CollectionViewSource 的访问通过服务层封装,ViewModel 只使用 IEnumerable 或纯 BCL 类型。

架构分层:View(XAML)经数据绑定到 ViewModel 层(使用 IEnumerable,无 WPF 程序集引用),再经 IEnumerable 接口到服务层(直接使用 CollectionViewSource),最后到数据层(ObservableCollection<T>)。

主要能力:服务层可创建带筛选的视图(CreateView)、排序视图(CreateSortedView)、分组视图(CreateGroupedView)以及排序与分组组合视图(CreateSortedGroupedView),并提供 Add、Remove、Clear 操作源集合。ViewModel 通过构造函数注入 IMemberCollectionService,仅接收 IEnumerable。

使用方式:将 ViewModel 与 Service 分离到不同项目;服务以接口定义便于测试;服务可注册为 Singleton 或通过 DI 容器管理,例如 services.AddSingleton<IMemberCollectionService, MemberCollectionService>();。分组视图在 XAML 中通过 ListBox 或 ItemsControl 的 GroupStyle 显示组头,可使用 HeaderTemplate 或 Expander 容器样式。

程序集规则:ViewModel 项目不得引用 WindowsBase.dll、PresentationFramework.dll、PresentationCore.dll,只能引用 BCL 类型、IEnumerable、ObservableCollection<T>、INotifyPropertyChanged;Service 项目可引用全部 WPF 相关程序集。

优势:单一源集合维护、源变更自动同步到所有筛选视图、MVVM 合规、可复用、ViewModel 可脱离 WPF 单元测试。

限制:若采用在 View 代码隐藏中初始化 CollectionView 的替代方案,ViewModel 需知道 ICollectionView 类型并引用 WindowsBase.dll,无法完全独立;完整独立应使用服务层方案。资料未提供具体收费、平台或效果信息。