我正在尝试为 WPF 开发过滤功能DataGrid
(来自 WPF 工具包)。我希望用户右键单击任何单元格并从中选择Filter
,CcontextMenu
然后网格应按单元格的值进行过滤。
我正在尝试 MV-VM 模式。我的 windows 的 datacontext 是MainWindowViewModel
具有属性的Transactions
。此属性返回ObservableCollection<TransactionViewModel>
,并且数据网格使用此集合作为其项目源。所以基本上每一行都是有界的TransactionViewModel
(你可以猜到,这个网格列出了交易)。MainWindowsViewModel
hasICollectionView
用于过滤和跟踪当前选定的行。将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,但它们不起作用(那里的路径不同,因为我需要到达实际的单元格模板)...
那么我该如何实现这个功能呢?也许整个方式都是错误的?我没有找到任何有价值的例子。我唯一发现的是 WPFDataGrid
Codeproject 上的 WPF 自动过滤器实现,由于某种原因它根本不起作用......
谢谢你。