2017-08-31 4 views
0

コマンド「ShowDataCommand」にCanExecuteメソッドがあります。イベントからCanExecuteを呼び出してコマンドを無効にする方法はありますか?

public override bool CanExecute(object parameter) 
{ 
    return _someFacade.CanCommandEnable(); 
} 

私は自分のアプリケーションを起動 は、CanExecuteが呼び出された値に応じて、正面から返される、それはどちらか を有効またはコマンドを無効にします。

新しい要件は、メインページにボタンがあることです。ユーザーがそのボタンをクリックするとダイアログが開き、 時間ダイアログが開くまで "ShowDataCommand"を無効にする必要があります。

ダイアログが開いているときとダイアログが閉じられたときに、すでにイベントが発生しています。コマンドでイベントを購読しました。 イベントは適切な真と偽の値で起動します。

今、私はこのイベントからコマンドを無効にすることはできますか?どういうわけかCanExecuteをこの新しい値で引き上げることはできますか?

+0

自分のコマンドクラスにコマンドオブジェクトの 'CanExecute' eを上げる' RaiseCanExecute() 'と呼ばれる方法を与えますベント。そのイベントに登録しているユーザーは、それに応じて更新されます。 –

答えて

1

CanExecuteコマンドを再度呼び出すには、CanExecuteChangedイベントを発生させることができます。

ほとんどのICommand実装にはこのイベントを発生させるメソッドがあります。独自の実装を使用している場合は、メソッドをクラスに追加してボタンをクリックしたときなど、コマンドを「リフレッシュ」するたびに呼び出すことができます:

public class YourCommandClass : ICommand 
{ 
    ... 
    public void RaiseCanExecuteChanged() //<-- call this method 
    { 
     var handler = CanExecuteChanged; 
     if (handler != null) 
      handler(this, EventArgs.Empty); 
    } 
} 

ICommand実装の例についてはMvvmLightRelayCommandクラスを参照してください:https://github.com/paulcbetts/mvvmlight/blob/dce4e748c538ed4e5f5a0ebbfee0f54856f52dc6/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(NET35)/Command/RelayCommand.cs

+0

返事をありがとう。しかし、どうやってそれをブールバリューで上げますか?私は、イベントが発生したときに有効または無効にすることを意味します - プライベートvoid OnDialogStateChanged(bool isDialogOpen) { RaiseCanExecuteChanged(isDialogOpen); } – App

+0

あなたはそうではありません。 _someFacade.CanCommandEnableを設定して、コマンドがリフレッシュされたときにtrueまたはfalseを返すようにする必要があります。 CanExecuteメソッドには、コマンドを有効または無効にするロジックが含まれている必要があります。 – mm8

+0

なぜCanExecuteChangedが私のために常にヌルなのか?ありがとう – App

関連する問題