4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

View を支えるコンバーター(QuickConverter)

Last updated at Posted at 2020-04-17

はじめに

オレオレ解釈の戒め覚え書き その3

前回に続きコンバーターの話です。強力なライブラリである QuickConverter についてご紹介します。

本文

値の変換は通常のコンバーターでも可能ですし、むしろその方が正攻法でしょう。とはいえ、使われるパターンとしては bool <-> Visibility などの単純なものや、一か所でしか利用されない変換である場合も多く、そのたびにコンバーターを用意するのは大袈裟な気もしています。汎用的に使える仕組みはないものかと探していたところ、QuickConverter というライブラリを見つけました。

QuickConverter は C# の記述方法を使い Xaml 上で変換式を直接定義できるため、View のソースだけで処理を完結させることができます。前回の bool 値を変換する例をこの方法で書き換えてみると、次のようにコンバーターが要らなくなります。

View
<GroupBox Visibility="{qc:Binding '$P ? Visibility.Visible : Visibility.Collapsed', ConvertBack='$value == Visibility.Visible', P={Binding IsVisible, Mode=TwoWay}}"/>

複数のプロパティをバインドすることだってできます。

View
<GroupBox Visibility="{qc:MultiBinding '$P0 ## $P1 ? Visibility.Visible : Visibility.Collapsed', P0={Binding Hoge, Mode=OneWay}, P1={Binding Huga, Mode=OneWay}}"/>

イベントのハンドリングまでできてしまいます。(コンバーターの守備範囲を超えていますが。)

View
<TextBlock x:Name="txt"/>
<Button Click="{qc:QuickEvent '$txt.Text = \'クリックされた\''}"/>

このように、これまでコンバーターを挟んでいた処理が Xaml 内で実装できるため、変換処理を見通しやすくなりました。非常に強力で応用が利くため、私は好んでこちらのライブラリを使わせて頂いています。

おわりに

QuickConverter についてご紹介しました。
私の場合は、共通化が必要なロジックは従来のコンバーターを使い、一行で完結する処理や、わざわざクラス化する間でもないと判断した場合は QuickConverter で実装しています。今回の例だけでもその汎用性の高さを感じ取れるかと思います。

詳しい説明は是非作者様のページをご覧ください。
https://github.com/JohannesMoersch/QuickConverter

次回はビヘイビアについてまとめます。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?