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

A.アプリケーションリソースにビューモデルを用意し、リソース定義にバインドさせることにより動的変更が可能になります。


先日のネタを基に ViewModel を使ってバインドできるようならないか、少し考えてみました。


WPFApplicationクラスには DataContext プロパティが存在しないため、バインド元になるデータコンテキストを用意することはできませんが、リソースにビューモデルのインスタンスを定義することが可能です。よって、アプリケーションリソースに用意したビューモデルと他のリソースをバインドさせることにより、App.xamlで定義したリソースの内容を動的に変更することが可能になります。


まず ViewModel を用意します。App.xaml で使われるビューモデルです。INotifyPropertyChanged を実装した、ごくありふれた ViewModel です。


次に App.xaml。ここでのポイントは、7行目のビューモデルのリソース定義と、9行目のデータコンテキストの指定になります。


画面の XAML です。先日の記事のものと変わりありません。


最後にコードビハインド。ここではButton のクリックイベント内で、アプリケーションリソースのビューモデルのプロパティの値を変更してますが、ビューモデルにコマンドを用意し Button とバインドさせても構いません。

Visual Basic 版のコード

あと、おまけで ViewModel とコードビハインドの Visual Basic版も用意しました。


以上、何かの参考になれば幸いです。

WPF FAQ の目次に戻る