wpf - 可以在字段更改时执行WPF命令

标签 wpf mvvm icommand canexecute

我想做的事情很简单,但是我没有在网上看到有关如何做的例子。如果字段已更改,我希望启用“更新”按钮。

上下文:我有一个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;
    }

最佳答案

嗨,您可以拥有一个boot标志,例如 hasChanges 最初为false。在可修改属性的 setter 中,将其设置为true,更新后再次将其设置为false。在CanExecute中返回hasChanges而不是true。假设您具有属性Name

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

我希望你有个主意。

关于wpf - 可以在字段更改时执行WPF命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17893116/

相关文章:

wpf - WPF 的 MVC(不是 mvvm)?

c# - 所有文本完全丢失或呈现为方框

c# - 将参数传递给 MVVM 命令

c# - 扩展 MVVM 的现有控件

xaml - 如何在 Mvvm Silverlight 5 中发送命令参数

c# - 调用命令接口(interface)时异步测试场景失败

wpf - 在注册区域的新窗口中打开 Prism 模块

wpf - 如何让 WPF 弹出窗口出现在应用程序的右下角?

wpf - 如何使用 MVVM Light 拥有多个唯一的 ViewModel 实例?

wpf - 类项目中的 ViewModel