wpf - 如何通过 MVVM 为 DataGrid ItemSsource 设置过滤器

标签 wpf data-binding mvvm

我有一个 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/

    相关文章:

    xamarin - 将 SelectedItem 设置为 null 不会重置选定的列表项

    c# - 如何将流中的图像解码为现有图像

    c# - 如何使 WPF 中的 DispatcherTimer 事件更顺畅?

    c# - 如何将文本框的文本双向数据绑定(bind)到依赖项属性

    c# - 图表绑定(bind)到非原始类型

    wpf - MVVM方式使用不同的控件来编辑不同的对象

    c# - DataGridTemplateColumn 中的 WPF AutoCompleteBox 编辑问题

    wpf - 如何将图像添加到mahaps tabcontrol

    Java网络服务: empty arrays

    wpf - 如何在 wpf 中使用 MVVM 处理 ComboBox 的 SelectionChanged 事件?