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

2023-11-21

我有一个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 中不可用,是吗?)


很简单。您只需将集合视图移动到视图模型内即可:

  1. In MainWindowViewModel定义类型的属性ICollectionView:

    public ICollectionView LogEntriesStoreView { get; private set; }
    
  2. 初始化后立即LogEntriesStore属性,您需要初始化LogEntriesStoreView属性具有以下代码:

    LogEntriesStoreView = CollectionViewSource.GetDefaultView(LogEntriesStore);
    
  3. 然后你需要删除CollectionViewSource从 XAML 并修改ItemsSource绑定以指向新创建的集合视图属性:

    <DataGrid AutoGenerateColumns="False" 
              Margin="0" 
              Name="dataGrid1" 
              ItemsSource="{Binding LogEntriesStoreView, Source={StaticResource ViewModel}}" 
              IsReadOnly="True">
    

就是这样。现在您可以访问视图模型内的集合视图,您可以在其中修改过滤器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 MVVM 为 DataGrid ItemSsource 设置过滤器 的相关文章

  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • 在 MVVM 中,可以在视图后面的代码中访问 ViewModel 吗?

    在 MVVM 模式中 是否可以接受甚至可以访问视图代码后面的 ViewModel 属性 我有一个可观察的集合 它填充在 ViewModel 中 我需要在视图中使用它来绑定到带有链接列表的无限滚动条 IE private LinkedList
  • Knockout.js - 数据绑定文本默认值

    在 knockout js 中 我有一个非常标准的字段 如下所示
  • wpf工具包折线图,无点且具有不同的线条颜色

    我有一些图表 我想动态添加没有数据点的 LineSeries 只是带有一些自定义颜色的线条 我发现隐藏数据点的唯一方法是 Style style new Style typeof LineDataPoint style Setters Ad
  • 通过 RDP 使用 WPF 的 Direct2d

    我正在开发一个 C 应用程序 它使用 SharpDx 通过 Direct2d 渲染地图 该地图与 D3DImage 一起显示在 WPF 主机上 在本地计算机上 一切正常 但当我尝试通过远程桌面连接时 D3DImage 会丢失其后备缓冲区 并
  • 调整屏幕和字体设置的 WPF 应用程序(或者,我如何将 DLU 与 WPF 中的单元相关联?)

    在MFC中 对话框的设计使用DLUs http msdn microsoft com en us library bb847924 aspx 在 WPF 中 我们以 1 96 英寸为单位指定 虽然这确实会缩放窗口和视觉元素 但我们如何使 W
  • TextBlock TextWrapping 不换行 #2

    好吧 那么this https stackoverflow com questions 6625177 textblock textwrapping not wrapping解决方案没有帮助 XAML 在这里
  • 现代 UI WPF 导航

    我正在使用现代 ui wpf 并尝试从 CheckLogin xaml 页面导航到 MainWindow xaml 页面 它们位于解决方案根目录中 我在 CheckLogin xaml 中写了这样的内容 BBCodeBlock bbBloc
  • WPF ListBoxItem 双击?

    WPF ListBox 没有 DoubleClick 事件 至少据我所知没有 是否有针对此问题的解决方法 让我双击某个项目即可让事件处理程序对其执行某些操作 感谢您的帮助 可以将带有参数的命令绑定到ListBoxItem不使用代码隐藏 or
  • Caliburn.Micro - ShowDialog() 如何关闭对话框?

    EDIT 新信息 刚刚设法让记录器工作 老实说 我不知道 cm 有一个 并且在尝试使用时收到此消息TryClose TryClose requires a parent IConductor or a view with a Close m
  • 列表元素之间的 Tab WPF

    我有一个列表框 其中每个项目都使用文本框表示 问题是我希望能够在移动到 xaml 窗口中的下一个元素之前在列表框中的所有项目之间进行切换 当前 和正常的 WPF 行为 是 当我按 Tab 键进入列表框时 第一个元素会突出显示 如果我再次按
  • 如何从 Access 数据库中读取“是/否”值作为布尔值?

    帮我找回YES NO来自 MS Access 的布尔格式数据类型 我尝试解析它 但它总是返回 false 更新 实际上不是问题抱歉 它确实接受 YES NO 作为布尔值 OleDbconnection dbConnect new OleDb
  • 为什么这个 Microsoft.VisualStudio.Imaging.CrispImage 不显示任何内容?

    我正在尝试创建一个非常简单的 WPF 应用程序来实验 Visual Studio 的这个概念图像服务和目录 https msdn microsoft com en us library mt628927 aspx 我不明白为什么我似乎无法在
  • Meteor Angular 2 应用程序中的警报仅在浏览器中单击后才会出现

    我已经在 Meteor Angular 2 应用程序的页面上实现了 ng2 bootstrap ngb alert 当我将警报推送到打字稿中的警报数组时 只有在再次单击浏览器窗口后才会显示警报 推送是在 Accounts createUse
  • WPF MVVM 应用程序服务层中的 ObservableCollection

    我在 Internet 上看到的 WPF MVVM 应用程序示例将 VM 视为与服务层交互的层 该服务层要么使用外部库中的 旧 事件 要么使用 HTTP 或其他方式与 Web 交互 但是如果我自己构建所有 M V VM 服务和其他部分怎么办
  • 阻止用户取消选择列表框中的项目?

    我有一个列表框 里面有很多项目 用户可以单击某个项目来编辑其内容 如何防止用户取消选择所有项目 即 用户不应该无法选择任何内容 您的情况缺少一个案例 即清除列表后 您将选择列表中不再存在的项目 我通过添加额外的检查来解决这个问题 var l
  • MVVM模式下向UIViewController传递数据

    我正在为我的视图控制器使用 MVVM 但我遇到了一个问题 我不确定解决它的最佳方法是什么 基本上 视图控制器 A 显示一个表视图 其中填充了视图模型 A 中的数据 每个单元格都有自己的视图模型 视图模型 A 负责创建这些视图模型并将它们公开
  • WPF - 普通 [标签:输入] 控制的最佳实践

    我想知道 这是在 WPF 中获取众所周知的标签输入 或输出 无关紧要 组合的最佳和最快的方法 这是一个简单的任务 只需考虑 对象 ME 的快速输出 名字 克里斯蒂安 年龄 28 心情 好 我知道 我可以使用带有文本块的网格 但说实话 这个
  • 使用 MVVM 和 Silverlight 的“等待”屏幕的通常首选方法

    我正在推进一个小型的概念验证应用程序 这主要是为了增强我在 Silverlight 中的 MVVM 技能 今天遇到一个有趣的问题 我不知道如何解决 MVVM 方式 我在搜索过程中也没有成功找到任何相关内容 关于这个问题 我有一个带有数据库后
  • 用什么? MVC、MVP 或 MVVM 还是……?

    我将启动一个 Java 项目来开发桌面应用程序 使用什么作为表示层模式 MVC MVP MVVM 或 如果可能的话 举一些可行的小例子 Actually the ultimate post you re looking for is thi

随机推荐

  • Node.js:捕获“child_process.spawn”的 STDOUT

    我需要在自定义中捕获stream生成的子进程的输出 child process spawn command args options 例如 var s fs createWriteStream tmp test txt child proc
  • Windows 上的 Bash - exe 文件的别名

    我正在 Windows 上的 Ubuntu 上使用 Bash 这是在 Windows 10 上运行 bash 的方式 我安装了 Creators 更新 Ubuntu 版本是 16 04 我最近在玩 npm node js 和 Docker
  • globalPackagesFolder存储库路径差异

    根据globalPackagesFolderNuGet 文档 它允许您更改默认全局包文件夹的位置 而不是 Users username nuget packages 所以 我发现这是存储包裹的地方 另一方面 repositoryPathNu
  • 使 FetchContent 与 find_package 兼容

    我尝试添加我的项目所需的所有依赖项以通过 CMake 进行编译 这应该会减少其他人第一次编译项目时的开销 为了实现这一点 我尝试使用 FetchContent 到目前为止一切顺利 当我链接生成的目标时 这根本不是问题 但现在我有一个库依赖于
  • 您需要在 GCD 的块内创建 NSAutoreleasePool 吗?

    通常 如果您生成后台线程或在 NSOperationQueue 上运行 NSOperation 则需要为该线程或操作创建 NSAutoreleasePool 因为默认情况下不存在 同样的规则是否适用于放置在 Grand Central Di
  • Jquery 验证插件 - 您可以从选项中启用“热切”验证吗?

    我在项目中使用 Jquery 验证插件 默认情况下 该插件会在单击提交按钮时验证输入 该行为是 惰性的 以便不打扰用户 如果发现错误 验证就会变得 急切 并在用户更正有问题的条目时验证输入 有没有办法通过选项覆盖最初的 惰性 行为 我在文档
  • 如何从时间(小时)中删除前导零

    我想要从 1 到 9 的小时不带前导零 但分钟带零 同时还要在时间上添加 15 分钟 现在 当我输入 1 和 46 时 我得到 02 01 我想得到 2 01 Scanner scan new Scanner System in int h
  • Request.Browser.IsMobileDevice 不适用于 iPadAir2 和 iOS 13.0.1

    I am able to detect iPadAir2 device running on iOS 11 4 using Request Browser IsMobileDevice and it gives me UserAgent i
  • 颁发者证书的过期状态是否会影响主体的过期?

    如果证书颁发者颁发的证书的过期时间发生在颁发者自己的证书过期之后 那么颁发者的证书过期后 颁发的证书是否仍然有效 为了更清楚 让我举个例子 I 发行人 C 颁发的证书 如果我在 2007 年创建了 C 到期日期为 2017 年 我的证书20
  • Leopard 终端(和 iTerm)忽略控制组合键

    I am very used to using Ctrl A Ctrl E Ctrl L etc as shortcuts to operations beginning of line end of line clear terminal
  • 找到不在列表中的最小整数

    我的一位同事使用了一个有趣的面试问题 假设给您一个非常长的 未排序的无符号 64 位整数列表 你如何找到最小的非负整数does not出现在列表中 后续 既然已经提出了明显的排序解决方案 你能比 O n log n 更快地完成它吗 后续 您
  • 查找“nan”并将其替换为数字

    我想替换数组中的数字 3 而不是所有 nan 这是我的代码 train train replace nan int 3 但我的数组没有任何变化 你能指导一下吗 您可以使用np isnan import numpy as np train n
  • 从 ExceptionLogger 引用操作参数

    我想利用新方法来全局记录错误 我写了一个继承的类ExceptionLogger并覆盖Log 方法 然后将其注册为替代品 public class TraceExceptionLogger ExceptionLogger public asy
  • 在 .NET 中创建插件环境的最佳方法

    我读了这篇文章如何在 NET中加载插件 我实在看不出微软的System Addin命名空间有什么高明之处 为什么我不能在 bin 目录中有一个插件文件夹 用户可以将程序集放入其中以实现我设计的界面 然后 我可以使用反射来创建插件类的实例 并
  • Phonegap 在应用程序运行时启用 GPS/位置

    我正在使用 jquery ui maps 和 HTML5 地理位置向用户显示位置列表 我需要利用用户的地理位置 所以 这是用例 用户未启用 GPS 定位服务 用户打开应用程序并导航到调用的视图导航器 地理位置获取用户的位置 应用程序出错并通
  • 尝试理解 javascript 中 for 循环内的递归

    我一直盯着这个问题的答案 甚至在每次迭代中写下变量之类的东西 我只是不明白这里的过程 当我输入控制台日志时 我看到 permute 在到达此行之前被调用 input length 1 次 input splice i 0 ch 当我完全迷失
  • 删除 ttk 组合框鼠标滚轮绑定

    我有一个 ttk 组合框 我想从鼠标滚轮解除绑定 以便在组合框处于活动状态时使用滚轮滚动不会更改值 而是滚动框架 我尝试过解除绑定以及绑定到空函数 但都不起作用 见下文 import Tkinter as tk import ttk cla
  • 从 9i 客户端连接到 11g 数据库时,ORA-01017 用户名/密码无效

    我正在尝试从具有 9i v9 2 0 1 客户端的 PC 连接到 11g v11 2 0 1 0 上的架构 它似乎可以很好地连接到某些模式 但不是这个 它返回一个ORA 01017 Invalid Username Password每次都会
  • 区分带有默认值和无值的&可选参数

    根据功能在 GigaMonkeys 上 Common Lisp 通过以下方式支持可选位置参数 optional并且默认值可以任意设置 默认的默认值为nil defun function mandatory argument optional
  • 如何通过 MVVM 为 DataGrid ItemSsource 设置过滤器

    我有一个DataGrid绑定到一个集合视图源在 XAML 中