0

ボタンを有効または無効にするために、SIlverLight RelayCommand を使用しています。いくつかの条件に基づいて、ボタンを無効にしたいのですが、ボタンを無効にする方法を提案してください

以下は、初期ロードでは正常に機能していますが、

 public RelayCommand BackClickCommand
    {
        get
        {
            if (_backClickCommand == null)
            {
                _backClickCommand = new RelayCommand(() =>
                {
                    step--;
                    if(step<1)
                   // code need to diable this button
                }, () => this.CanExecute());
            }

            return _backClickCommand;

        }
    }
    int step=2;

    public bool CanExecute()
    {
        if(step>0)
        return enabled;
        else false;
    }

私のコードのどこかで私がやっている

    enabled = false;

ボタンを無効にする方法を提案してください

ありがとう、

4

2 に答える 2

2

Xamlを次のようにバインドしていると仮定します。

<Button Command="{Binding BackClickCommand}" />

あなたがする必要があるのは、バインディングをもう一度チェックするようにUIに思い出させることです:

enabled = false;
PropertyChanged(this, new PropertyChangedEventArgs("BackClickCommand"));

これにより、UIがBackClickCommand再度チェックされ、変更されたことが確認されるため、ボタンが無効になります。

完全なコード例については、MSDNを参照してください。

編集:これは可能なコードの一部になります:

int step = 2;

public RelayCommand BackClickCommand
{
    get
    {
        if (_backClickCommand == null)
        {
            _backClickCommand = new RelayCommand(() =>
            {
                step--;
                PropertyChanged(this, new PropertyChangedEventArgs("BackClickCommand")); 
            }, () => this.CanExecute());
        }

        return _backClickCommand;

    }
}

public bool CanExecute()
{
    return this.step > 0;
}
于 2013-01-09T13:00:18.957 に答える
0

ステップ値が変更されるたびに、CanExecuteが再度評価されるように、コマンドが変更されたことを通知する必要があります。

あなたが言ったように、enabledはコードのどこかで評価されます。

あなたのコードはもっと同じではないかもしれません:

int step=2;

public RelayCommand BackClickCommand
{
    get
    {
        if (_backClickCommand == null)
        {
            _backClickCommand = new RelayCommand(() =>
            {
                step--; // Your logic
                OnPropertyChanged("BackClickCommand"); // Notify the change!
            }, () => this.CanExecute());
        }

        return _backClickCommand;
    }
}

public bool CanExecute()
{
    return enabled;
}
于 2013-01-09T13:24:50.780 に答える