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;
    }

1 ответ

Решение

Привет, у вас может быть флаг bool, такой как hasChanges, который изначально имеет значение false. И в установщике ваших изменяемых свойств вы устанавливаете его в значение 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;
}

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

Другие вопросы по тегам