我有一个DataGrid绑定到一个集合视图源在 XAML 中。
<Window.Resources>
<local:MainWindowViewModel x:Key="ViewModel"/>
<CollectionViewSource x:Key="cvsEntries"
Source="{Binding LogEntriesStore,
Source={StaticResource ViewModel}}"/>
</Window.Resources>
LogEntriesStore
is an 可观察集合 (LogEntry是一个 DTO,在本次讨论中并不重要)
The DataGrid声明为:
<DataGrid AutoGenerateColumns="False"
Margin="0"
Name="dataGrid1"
ItemsSource="{Binding Source={StaticResource cvsEntries}}"
IsReadOnly="True">
现在我在这个中的各个单元格上都有上下文菜单DataGrid,启动过滤请求。右键单击单元格,然后选择筛选器来筛选所有行,并仅显示此特定值。
MVVM 获取要过滤的请求,但现在是棘手的一点。如何在 CollectionViewSource 上设置过滤器?
(顺便说一句——这就像带着 Silverlight 在公园里散步一样PagedCollectionView
但这似乎在 WPF 中不可用,是吗?)
很简单。您只需将集合视图移动到视图模型内即可:
-
In MainWindowViewModel
定义类型的属性ICollectionView
:
public ICollectionView LogEntriesStoreView { get; private set; }
-
初始化后立即LogEntriesStore
属性,您需要初始化LogEntriesStoreView
属性具有以下代码:
LogEntriesStoreView = CollectionViewSource.GetDefaultView(LogEntriesStore);
-
然后你需要删除CollectionViewSource
从 XAML 并修改ItemsSource
绑定以指向新创建的集合视图属性:
<DataGrid AutoGenerateColumns="False"
Margin="0"
Name="dataGrid1"
ItemsSource="{Binding LogEntriesStoreView, Source={StaticResource ViewModel}}"
IsReadOnly="True">
就是这样。现在您可以访问视图模型内的集合视图,您可以在其中修改过滤器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)