DataGrid
(WPF Toolkit から) WPF のフィルタリング機能を開発しようとしています。ユーザーに任意のセルを右クリックしてから選択Filter
してもらいCcontextMenu
、セルの値でグリッドをフィルター処理する必要があります。
MV-VM パターンを試しています。私のウィンドウのデータコンテキストは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 を持っていますが、それらは機能しません (実際のセル テンプレートに到達する必要があるため、そこではパスが異なります)...
では、どうすればこの機能を実装できますか? おそらく全体の方法が間違っていますか?それに関する貴重な例は見つかりませんでした。DataGrid
私が見つけた唯一のものは、何らかの理由でまったく機能しない Codeproject での WPFオートフィルターの実装です...
ありがとうございました。