2013-07-27 40 views
2

我想要做的事情很简单,但是我没有看到有关如何执行此操作的示例。如果字段已更改,我希望启用“更新”按钮。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; 
    } 

回答

0

嗨,你可以有一个像hasChanges一个布尔标志,它是在二传手假initially.and你的可修改属性设置为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; 
} 

我希望你有一个主意。