MAUI:ボタンの有効無効を条件で切り替える
CommunityToolkitを使っています。
CommunityToolkitを使うとこれまで(Xamarin.Forms)ではたくさんの定型的なコードを書かなければならなかったところが、クラスやプロパティ、メソッドへの属性の指定で済むため、実装の労力を大幅にへらすことができます。
CommunityToolkitはMAUI専用というわけではなくWPFでも使えます。
さて、今回は入力欄とボタンがあって、入力欄に何かしら入力されていない場合はボタンを無効にする、ということをやります。
こういうことです。
この記事が詳しいです。
まずはAddメソッドのRelayCommand属性にCanExecuteに判定用のメソッドを指定します。 ここで指定した判定用のメソッドCanAddExecuteはTextプロパティが空じゃないかをチェックし、空の場合はfalse(ボタン無効)、空じゃない場合はtrue(ボタン有効)を返すメソッドです。
アプリを実行すると、以下のようにボタンが無効の状態です。 いいですね!
しかし、これだけだと仮に入力欄に入力してもボタンは有効になりません。
なぜなら、チェックするのは最初だけでTextプロパティが変更されてもチェックしなおさないからです。
なので、Textプロパティが変更されるたびにチェックされるようにする必要があります。それが
NotifyCanExecuteChangedFor
属性。
これをTextプロパティにつけてあげます。 対象のコマンドはAddボタンにバインディングされているAddCommandです。
これでTextプロパティが変更されるたびにAddCommandの有効・無効判定メソッドCanAddExecuteが実行されることになります。
さて、改めて実行します。
入力すると、ボタンが有効になりました! よし!
空にすると、無効になります