【WPF】 Bool型プロパティを反転してBindingしたい
ViewModelに定義したBool型のプロパティを反転(否定)してBindingしたくなった。
例えば処理中を表すプロパティがtrueの場合にボタンなどの各種コントロールをDisable状態にして触らせないようにしたい。
こんな変数をViewModelに定義して
private bool _Executing = false; public bool Executing { get => _Executing; set { _Executing = value; RaisePropertyChanged(nameof(Executing)); } }
XAMLにはこんなふうに書きたかった。しかしこのような書き方はできない
<Button IsEnabled="{Binding !Executing}"> OK </Button>
調べるとConverterを間に挟むしか無さそうということが分かった。でもこんなもののためにわざわざ専用のConverterを作成するのも面倒だなと思ったら、良さそうなライブラリを見つけた。
これを利用するとXAML内に式が書けるようで以下のように書ける。便利!
xmlns:qc="http://QuickConverter.CodePlex.com/" <Button IsEnabled="{qc:Binding '!$P', P={Binding Executing}}"> OK </Button>