我有一个Command
属性,在视图模型中有这个定义:
public RelayCommand SaveCommand => new RelayCommand(OnSave, CanSave);
每当ErrorsChanged
的{{1}}被触发时,INotifyDataErrorInfo
类都会调用RaiseCanExecuteChanged
来启用/禁用按钮:
RelayCommand
命令的两个委托在构造函数中设置:
public void RaiseCanExecuteChanged()
{
CanExecuteChanged(this, EventArgs.Empty);
}
但是当错误状态发生变化时(调用public RelayCommand(Action executeMethod, Func<bool> canExecuteMethod)
{
_TargetExecuteMethod = executeMethod;
_TargetCanExecuteMethod = canExecuteMethod;
}
时)RaiseCanExecuteChanged
方法不会被调用,过了一段时间我改变了CanSave
初始化方式来设置改为构造函数:
Command
它有效!但为什么呢?
答案 0 :(得分:1)
在视图模型的构造函数中初始化./mvnw install dockerfile:build
时,它只在初始化视图模型时运行一次,但在使用以下内容定义SaveCommad
时
SaveCommand
你实际上在做:
public RelayCommand SaveCommand => new RelayCommand(OnSave, CanSave);
在这种情况下,每当调用public RelayCommand SaveCommand {
get {
return new RelayCommand(OnSave, CanSave);
}
}
的getter时,它都会返回SaveCommand
的新实例。因此,当调用RelayCommand
时,它可能与当前绑定到UI的对象不同,因此无法更新状态