Команда CanExecute WPF при изменении поля

То, что я хочу сделать, довольно просто, однако я не видел в Интернете примеров того, как это сделать. Я хочу, чтобы кнопка «Обновить» стала активной, если поле было изменено.

Контекст: у меня есть форма WPF, которая обновляет строку в базе данных. Я не хочу, чтобы пользователь мог нажать кнопку «Обновить», если он/она не изменил какое-либо значение формы. Я использую шаблон MVVM и имею 4 свойства, которые можно обновить (имя, адрес, телефон и адрес электронной почты). Если пользователь не изменит одно из этих свойств, я не хочу, чтобы кнопка «Обновить» была включена.

Спасибо!

Код команды (я не уверен, какую проверку нужно указать в CanExecute)

    public ICommand UpdateCommand
    {
        get;
        internal set;
    }

    private void CreateUpdateCommand()
    {
        UpdateCommand = new RelayCommand(UpdateExecute, CanExecuteUpdateCommand);
    }

    private void UpdateExecute(object obj)
    {
        ClientModel.UpdateClient(_selectedClient);
    }

    private bool CanExecuteUpdateCommand(object obj)
    {
        return true;
    }

person francisg3    schedule 27.07.2013    source источник


Ответы (1)


Привет, у вас может быть логический флаг, например hasChanges, который изначально является ложным. И в setter ваших модифицируемых свойств вы устанавливаете его true, а после обновления снова устанавливаете его false. CanExecute возвращает это hasChanges вместо true. Предположим, у вас есть свойство Имя

private bool hasChanges=false;
    private string name;

    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
            hasChanges = true;
            Notify("Name");
        }
    }

    private bool CanExecuteUpdateCommand(object obj)
    {
        return hasChanges;
    }
 private void UpdateExecute(object obj)
{
    ClientModel.UpdateClient(_selectedClient);
    hasChanges=false;
}

Надеюсь, у вас есть идея.

person yo chauhan    schedule 27.07.2013