14

MVVMを使用してWPFでアプリケーションを開発していますが、ICommandオブジェクトでスタックしています。

いくつかのボタンを含むウィンドウがあるので、以下のようにXAMLのそれぞれのICommandにバインドします。

<Button Command="{Binding DoSomethingCommand}" Content="Do Something" />

次に、ビューモデルクラスで次のように記述しました。

public class MyViewModel : ObservableObject
{

    private bool isDoSomethingButtonEnabled = false;
    ....        
    public ICommand DoSomethingCommand
    {
        get;
        private set;
    }
    ....
    ....
    public MyViewModel()
    {
        DoSomethingCommand = new DelegateCommand<String>(this.OnDoSomething, this.CanDoSomething);
    }

    private void OnDoSomething(String arg)
    {

    }

    private bool CanDoSomething(String arg)
    {
        return isDoSomethingButtonEnabled;
    }
    ....
}

したがって、ウィンドウを最初に開いたときにボタンを有効にしない必要があるため、変数isDoSomethingButtonEnabledをに設定しましたfalse。そして、それは機能し、ボタンは最初は無効になっていますが、私の問題は、実行時に変数isDoSomethingButtonEnabledをに変更しても、ボタンがまだ無効になっていることです。true

isDoSomethingButtonEnabled変数をに変更した後、いくつかのテストを実行しtrue、の結果を出力するDoSomethingCommand.CanExecute()と、「true」と表示されます。

では、ボタンを有効にするにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

15

インターフェイスにCanExecuteChangedというイベントがあり ます。これは次のとおりです。ICommand

コマンドを実行するかどうかに影響する変更が発生した場合に発生します。

Prism DelegateCommandRaiseCanExecuteChangedを使用すると、次のメソッドでこのイベントを発生させることができます。

public void SomeMethod()
{
    //do some work
    isDoSomethingButtonEnabled = true;
    DoSomethingCommand.RaiseCanExecuteChanged();
}
于 2012-06-06T20:51:37.767 に答える