我正在尝试为WPF DataGrid
(来自WPF工具包)开发过滤功能。我想要一个用户右键单击任何单元格,然后从CcontextMenu
中选择Filter
,然后应根据单元格的值过滤网格。WPF DataGrid:获取列绑定属性进行过滤
我正在尝试M-V-VM模式。我的windows的datacontext是MainWindowViewModel
,它有一个属性Transactions
。此属性返回ObservableCollection<TransactionViewModel>
,并且数据网格将此集合用作其项目源。所以基本上每行都有TransactionViewModel
(正如你所猜测的,这个网格列出了交易)。 MainWindowsViewModel
有ICollectionView
,用于过滤和跟踪当前选中的行。 DataGrid
的属性IsSynchronizedWithCurrentItem
设置为“true”,所以myCollectionView.CurrentItem
给我当前选择的TransactionViewModel
。
我唯一需要知道的是我需要过滤哪一列。这取决于用户点击上下文菜单的位置。所以我试图通过上下文菜单项的CommandProperty
来传递这些信息。在这里,我有一个真正的问题。我试过这个:
CommandParameter="{Binding Column.Binding.Path.Path,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type tk:DataGridCell}}}" />
这真的很丑,但是这个适用于DataGridTextColumn
s。不幸的是,我也DataGridTemplateColumn
s,他们不工作(路径是不同的,因为我需要达到实际的单元格模板)...
那么我怎么能实现这个功能?也许整个过程都是错误的?我没有找到任何有价值的例子。我唯一发现的是WPF DataGrid
自动过滤器在Codeproject上的实现,由于某种原因根本不工作...
谢谢。