Ral*_*ton 9 data-binding wpf mvvm
我有一个DataGrid绑定到XAML中的CollectionViewSource.
<Window.Resources>
<local:MainWindowViewModel x:Key="ViewModel"/>
<CollectionViewSource x:Key="cvsEntries"
Source="{Binding LogEntriesStore,
Source={StaticResource ViewModel}}"/>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
LogEntriesStore是一个ObservableCollection (LogEntry是一个在本次讨论中不重要的DTO)
在DataGrid的声明为:
<DataGrid AutoGenerateColumns="False"
Margin="0"
Name="dataGrid1"
ItemsSource="{Binding Source={StaticResource cvsEntries}}"
IsReadOnly="True">
Run Code Online (Sandbox Code Playgroud)
现在,我在此DataGrid中的各个单元格上有上下文菜单,以启动过滤请求.右键单击一个单元格,然后选择过滤器以过滤所有行,并仅显示此特定值.
MVVM获取过滤请求,但现在是棘手的一点.如何在CollectionViewSource上设置过滤器?
(顺便说一句 - 这可能是在公园里用Silverlight散步,PagedCollectionView但似乎在WPF中没有,是吗?)
Pav*_*kov 16
非常简单.您只需要在视图模型中移动集合视图:
在MainWindowViewModel定义类型的属性时ICollectionView:
public ICollectionView LogEntriesStoreView { get; private set; }
Run Code Online (Sandbox Code Playgroud)在初始化LogEntriesStore属性之后,您需要LogEntriesStoreView使用以下代码初始化该属性:
LogEntriesStoreView = CollectionViewSource.GetDefaultView(LogEntriesStore);
Run Code Online (Sandbox Code Playgroud)然后,您需要CollectionViewSource从XAML中删除并修改ItemsSource绑定以指向新创建的集合视图属性:
<DataGrid AutoGenerateColumns="False"
Margin="0"
Name="dataGrid1"
ItemsSource="{Binding LogEntriesStoreView, Source={StaticResource ViewModel}}"
IsReadOnly="True">
Run Code Online (Sandbox Code Playgroud)而已.现在,您可以访问视图模型中的集合视图,您可以在其中修改过滤器.
| 归档时间: |
|
| 查看次数: |
14866 次 |
| 最近记录: |