繁体   English   中英

WPF DataGrid:获取列绑定属性以进行过滤

[英]WPF DataGrid: Get column binding property for filtering

我正在尝试为WPF DataGrid开发筛选功能(来自WPF Toolkit)。 我希望用户右键单击任何单元格,然后从其CcontextMenu选择“ Filter ,然后应使用该单元格的值来过Filter格。

我正在尝试MV-VM模式。 我的Windows的datacontext是MainWindowViewModel ,它具有一个Transactions属性。 此属性返回ObservableCollection<TransactionViewModel> ,并且数据网格使用此集合作为其项源。 因此,基本上每一行都绑定到TransactionViewModel (您可以猜到,此网格列出了事务)。 MainWindowsViewModel具有ICollectionView ,该ICollectionView用于筛选和跟踪当前选定的行。 DataGrid的属性IsSynchronizedWithCurrentItem设置为“ true”,因此myCollectionView.CurrentItem给我当前选择的TransactionViewModel

我唯一仍然需要知道的是我需要过滤哪一列。 这取决于用户单击上下文菜单的位置。 因此,我尝试使用上下文菜单项的CommandProperty传递此信息。 在这里,我有一个真正的问题。 我尝试了这个:

CommandParameter="{Binding Column.Binding.Path.Path, 
                                       RelativeSource={RelativeSource FindAncestor,
                                                       AncestorType={x:Type tk:DataGridCell}}}" />

这确实很丑陋,但这适用于DataGridTextColumn 不幸的是,我也有DataGridTemplateColumn ,它们不起作用(路径不同,因为我需要到达实际的单元格模板)...

那么如何实现此功能? 也许整个方法是错误的? 我没有找到任何有价值的例子。 我发现的唯一一件事是Codeproject上的WPF DataGrid自动筛选器实现由于某种原因根本无法使用...

谢谢。

我不确定100%是否会有所帮助,但是...

DataGrid具有CurrentCell,因此您可以在MainWindowViewModel中以TwoWay模式绑定它。 然后,每个“行”都可以指向MainWindowViewModel中定义的DoFilter命令。 这不是一个完美的解决方案(因为viewmodel必须知道DataGrid Cell类型),但它应该可以工作。

为什么不将单元格作为这样的参数传递:

CommandParameter=
  "{Binding RelativeSource={RelativeSource FindAncestor,tk:DataGridCell,1}}" />

并让您命令的Executed事件处理查找实际列名的所有困难部分? 这样,您可以编写所需的所有特殊情况代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM