Q122. App.xamlで定義したリソースを動的に変更したい(バインディング編・その弐)

A.アプリケーションクラス自体をカスタマイズしリソースにバインドさせることで、アプリケーションリソースの動的変更が可能になります。


昨日のネタを基に ViewModel を使わずリソースとバインドするようできないか、少し考えてみました。


WPFAppクラス(VB なら Application クラス)には DataContext プロパティが存在しないため、バインド元となるデータコンテキストを用意することはできませんが、App
クラスに INotifyPropertyChanged インターフェイスを実装して変更通知プロパティを設けることは可能です。今回はこの手を使ってみましょう。


App クラスをカスタマイズします。INotifyPropertyChanged インターフェイスを実装し、変更通知プロパティを設けます。


お次は App.xaml。アプリケーションリソースのバインドソースに Application.Current を指定するのがポイントです。


最後はコードビハインドです。ここでは便宜上ボタンクリックイベントでリソースの値を変更してますが、ビューモデルからも Appクラスのインスタンスにアクセスできるので、ビューモデルにコマンドを実装しバインドさせても問題ありません。


以上、昨日のケースより、よりシンプルに実装できると思います。バインドさせるプロパティが少ないなら、Appクラス(VB なら Applicationクラス)を直接カスタマイズするのも、いいかも知れませんね。


WPF FAQ の目次に戻る