はじめに
オレオレ解釈の戒め覚え書き その3
前回に続きコンバーターの話です。強力なライブラリである QuickConverter についてご紹介します。
本文
値の変換は通常のコンバーターでも可能ですし、むしろその方が正攻法でしょう。とはいえ、使われるパターンとしては bool <-> Visibility などの単純なものや、一か所でしか利用されない変換である場合も多く、そのたびにコンバーターを用意するのは大袈裟な気もしています。汎用的に使える仕組みはないものかと探していたところ、QuickConverter というライブラリを見つけました。
QuickConverter は C# の記述方法を使い Xaml 上で変換式を直接定義できるため、View のソースだけで処理を完結させることができます。前回の bool 値を変換する例をこの方法で書き換えてみると、次のようにコンバーターが要らなくなります。
<GroupBox Visibility="{qc:Binding '$P ? Visibility.Visible : Visibility.Collapsed', ConvertBack='$value == Visibility.Visible', P={Binding IsVisible, Mode=TwoWay}}"/>
複数のプロパティをバインドすることだってできます。
<GroupBox Visibility="{qc:MultiBinding '$P0 ## $P1 ? Visibility.Visible : Visibility.Collapsed', P0={Binding Hoge, Mode=OneWay}, P1={Binding Huga, Mode=OneWay}}"/>
イベントのハンドリングまでできてしまいます。(コンバーターの守備範囲を超えていますが。)
<TextBlock x:Name="txt"/>
<Button Click="{qc:QuickEvent '$txt.Text = \'クリックされた\''}"/>
このように、これまでコンバーターを挟んでいた処理が Xaml 内で実装できるため、変換処理を見通しやすくなりました。非常に強力で応用が利くため、私は好んでこちらのライブラリを使わせて頂いています。
おわりに
QuickConverter についてご紹介しました。
私の場合は、共通化が必要なロジックは従来のコンバーターを使い、一行で完結する処理や、わざわざクラス化する間でもないと判断した場合は QuickConverter で実装しています。今回の例だけでもその汎用性の高さを感じ取れるかと思います。
詳しい説明は是非作者様のページをご覧ください。
https://github.com/JohannesMoersch/QuickConverter
次回はビヘイビアについてまとめます。