Я пытаюсь разработать функциональность фильтрации для WPF DataGrid
(из набора инструментов WPF). Я хочу, чтобы пользователь щелкнул правой кнопкой мыши по любой ячейке и выбрал Filter
из своего CcontextMenu
, а затем сетку нужно отфильтровать по значению ячейки.WPF DataGrid: Получить свойство связывания столбца для фильтрации
Я пытаюсь использовать шаблон M-V-VM. Мой 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
с. К сожалению, у меня также есть DataGridTemplateColumn
s, и они не работают (путь там другой, потому что мне нужно достичь фактического шаблона ячейки) ...
Как я могу реализовать эту функциональность? Возможно, весь путь неправильный? На этом я не нашел никакого ценного примера. Единственное, что я нашел, это реализация автофильтра WPF DataGrid
на Codeproject, которая не работает вообще по какой-либо причине ...
Спасибо.