[WPF] コントロールに直接DataTriggerを設定する方法

MVVM, WPF, XAML

WPFで,あるデータの値によって画面の見た目を変化させたいときなんかに使えるDataTrigger。

これは,TriggerやEventTriggerのような使い方をするとビルドが通らないことがある。例えば次のような場合だ。

誤った使い方の例

この例では,TestFlagというViewModelのプロパティの値がTrueのときにTextBoxのテキストを「バナナ」に変えようとしているが,ビルドしようとすると次のようなエラーに見舞われる。

実はDataTriggerはコントロールのTriggersプロパティに直接指定できるものではなく,StyleのTriggersプロパティで使わないとこのようなエラーとなる。

例えば,次のような使い方ならビルドが通る。

正しい使い方の例

TextBoxのTextプロパティの扱いに注意。

TextBoxタグに直接Textプロパティを指定すると,DataTriggerによる値の切替が効かなくなる。ずっと「りんご」のままになってしまう。

この例では,Style内のSetterタグでTextプロパティの既定の値として「りんご」を設定しておき,DataTriggerでTestFlagの値に応じて「バナナ」に切り替えるようにしている。

MVVM, WPF, XAML

Posted by もち