Q122. App.xamlで定義したリソースを動的に変更したい(バインディング編・その弐)
A.アプリケーションクラス自体をカスタマイズしリソースにバインドさせることで、アプリケーションリソースの動的変更が可能になります。
昨日のネタを基に ViewModel を使わずリソースとバインドするようできないか、少し考えてみました。
WPF の Appクラス(VB なら Application クラス)には DataContext プロパティが存在しないため、バインド元となるデータコンテキストを用意することはできませんが、App
クラスに INotifyPropertyChanged インターフェイスを実装して変更通知プロパティを設けることは可能です。今回はこの手を使ってみましょう。
App クラスをカスタマイズします。INotifyPropertyChanged インターフェイスを実装し、変更通知プロパティを設けます。
お次は App.xaml。アプリケーションリソースのバインドソースに Application.Current を指定するのがポイントです。
最後はコードビハインドです。ここでは便宜上ボタンクリックイベントでリソースの値を変更してますが、ビューモデルからも Appクラスのインスタンスにアクセスできるので、ビューモデルにコマンドを実装しバインドさせても問題ありません。
以上、昨日のケースより、よりシンプルに実装できると思います。バインドさせるプロパティが少ないなら、Appクラス(VB なら Applicationクラス)を直接カスタマイズするのも、いいかも知れませんね。