(WPFツールキットの)WPF DataGrid
のフィルタリング機能を開発しようとしています。ユーザーが任意のセルを右クリックし、そのCcontextMenu
からFilter
を選択し、セルの値でグリッドをフィルタリングする必要があります。WPF DataGrid:フィルタリングのカラムバインディングプロパティを取得する
私はM-V-VMパターンを試しています。私の窓のdatacontextはを持つMainWindowViewModel
です。このプロパティは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
もあります。実際のセルテンプレートに到達する必要があるため、パスは異なります。
この機能はどのように実装できますか?おそらく全体の方法が間違っているでしょうか?私はそれについて貴重な例は見つけられませんでした。私が見つけた唯一の事は何らかの理由でWPF DataGrid
オートコードの実装がCodeprojectで全く機能しないことです。
ありがとうございます。あなたはMainWindowViewModelで双方向モードでそれを結合することができるようCurrentCellを、これは役立つだろうけど...
データグリッドがある場合