Q125. コントロールの Visiblity プロパティに bool 値をバインドしたい
A.いまさら感がひしひし漂うネタですが、まあコンセプトが周回遅れブログのため、その辺りは気にせずスルーでお願いできればと思います。
コントロールの Visiblity プロパティに、ビューモデル側の bool 型プロパティをバインドさせたいシーンは多いと思います。Visiblity プロパティの型は System.Windows.Visibilityのため、bool と互換性はありません。こういう具合に型が異なるもの同士をバインドしたいときに用意するのがいわゆるコンバーターです。
参考記事:WPFのデータ変換
殆どのケースでは、上の記事のように自作しなければならないのですが、Visibility と bool 値のバインドでは、標準で用意されているコンバーターが存在します。それが BooleanToVisibilityConverter です。
サンプルコード
以下、簡単なサンプルを考えてみました。チェックボックスをONにすると、テキストを表示するプログラムです。
まずビューモデルです。ちなみにMVVMフレームワークは Livet を使ってます。
お次はビュー。TextBlock の Visibility プロパティとビューモデルの IsChecked プロパティを BooleanToVisibilityConverter を使ってバインドしてます。
上のコードでは少々XAMLが冗長になってしまうので、通常コンバーターを使う場合、リソースに定義して使いまわします。以下、リソースを使ったサンプルです。アプリケーション全体で使用するなら App.xaml (VB なら Application.xaml) に定義しておくといいでしょう。
System.Windows.Controls 空間には他にも幾つかコンバーターが用意されてますが、使いどころが微妙なコンバーターばかりですね。よくありがちな数値とテキストの変換などは標準のコンバーターが用意されてないので、自前のコンバーターを用意する必要があります。