C#の WPF Prism でDataGridoカラムのVisibilityをバインドする方法を説明します。
例えば、DataGrid内のカラムに対してコンボボックス(の選択肢)をデータバインドさせる場合、RelativeSource FindAncestor を用いた方法が考えられます。
しかし、DataGridのカラムのVisibilityにデータバインドする場合、RelativeSourceを用いた方法は使えません。
そのため、ViewModelを参照可能とするクラスを作成して対応します。
対象ファイル(例)
コーディングが必要なファイルは下記の A~C です。
BindingProxy.cs ・・・A
通常、ItemsSourceを使うとバインドしているコレクションの各要素がDataContextとなるため、 DataGrid内ではItemsSource以外のバインドが出来なくなります。
※DataContext:Bindingの対象
そこで、DataGrid内のコントロールを直接ViewModelのプロパティにアクセス可能とする**「BindingProxy」**クラスを準備します。
▼BindingProxy.cs
SampleView.xaml ・・・B
①Viewのxamlにローカルクラス参照を追加
WindowもしくはUserControl要素に、BindingProxyクラスのnamespace参照を追加します。
例)BindingProxy.cs の namespace が、Template2.WPF.Services の場合
xmlns:services="clr-namespace:Template2.WPF.Services"
▼SampleView.xaml
②DataGridのリソースにBindingProxy参照を追加
下記コードを追加してDataGrid内でBindingProxyを利用可能とします。
例)DataGridへの組込み例
▼SampleView.xaml
③DataGridカラムのVisibilityをバインド
DataGridのColumn要素に、Visibilityを追加します。
ポイント
- Binding:Data.XXX を記載すること
- Source:StaticResourceを記載すること
▼SampleView.xaml
SampleViewModel.cs ・・・C
④ViewModelにVisibilityバインド用プロパティを準備
通常のWPF Prismでプロパティをデータバインドする方法と同様に、Visibilityをバインドした名称のプロパティとプライベート変数を追加します。
▼SampleViewModel.cs
以上です。