我正在嘗試爲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上的實現,由於某種原因根本不工作...
謝謝。