Подтвердить что ты не робот

Как включить кнопку с помощью метода CanExecute

Я разрабатываю приложение в WPF с использованием MVVM, но я застрял с объектами ICommand.

У меня есть окна, содержащие некоторые кнопки, поэтому я привязываю их к своей соответствующей ICommand в XAML, как показано ниже:

<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"!

Итак, что мне делать, чтобы включить мою кнопку?

Заранее благодарю

4b9b3361

Ответ 1

В интерфейсе ICommand есть событие, называемое CanExecuteChanged, которое:

Происходит, когда происходят изменения, влияющие на то, выполняется ли команда должен выполняться.

С Призмой DelegateCommand вы можете поднять это событие с помощью метода RaiseCanExecuteChanged:

public void SomeMethod()
{
    //do some work
    isDoSomethingButtonEnabled = true;
    DoSomethingCommand.RaiseCanExecuteChanged();
}