我有一个 DataGrid 绑定(bind)到 XAML 中的 CollectionViewSource。
<Window.Resources>
<local:MainWindowViewModel x:Key="ViewModel"/>
<CollectionViewSource x:Key="cvsEntries"
Source="{Binding LogEntriesStore,
Source={StaticResource ViewModel}}"/>
</Window.Resources>
LogEntriesStore
是一个 ObservableCollection(LogEntry 是一个 DTO,在这个讨论中并不重要)DataGrid 声明为:
<DataGrid AutoGenerateColumns="False"
Margin="0"
Name="dataGrid1"
ItemsSource="{Binding Source={StaticResource cvsEntries}}"
IsReadOnly="True">
现在,我在此 DataGrid 中的各个单元格上都有上下文菜单,以启动过滤请求。右键单击一个单元格,然后选择过滤器以过滤所有行,并仅显示此特定值。
MVVM 收到过滤请求,但现在有点棘手。如何在 CollectionViewSource 上设置过滤器?
(顺便说一句——这本来是带着 Silverlight
PagedCollectionView
在公园里散步,但这似乎在 WPF 中不可用,对吗?)
最佳答案
非常简单。您只需要在 View 模型中移动 Collection View :
MainWindowViewModel
定义 ICollectionView
类型的属性:public ICollectionView LogEntriesStoreView { get; private set; }
LogEntriesStore
之后属性,您需要初始化 LogEntriesStoreView
具有以下代码的属性:LogEntriesStoreView = CollectionViewSource.GetDefaultView(LogEntriesStore);
CollectionViewSource
从 XAML 并修改 ItemsSource
绑定(bind)指向新创建的 Collection View 属性:<DataGrid AutoGenerateColumns="False"
Margin="0"
Name="dataGrid1"
ItemsSource="{Binding LogEntriesStoreView, Source={StaticResource ViewModel}}"
IsReadOnly="True">
就是这样。现在您可以访问 View 模型中的 Collection View ,您可以在其中修改过滤器。
关于wpf - 如何通过 MVVM 为 DataGrid ItemSsource 设置过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5809895/