我正在使用 MVVM (prism) 开发 wpf 应用程序。
我的模型类之一“StandardContact”的属性直接绑定到视图。我使用 IDataErrorInfo 来跟踪并通知模型是否有任何错误。如果模型中有任何错误,我会禁用“保存”命令。
当用户输入一些数据时,我使用 StandardContact.PropertyChanged 处理程序来查看“保存”命令是否可以执行(即用户输入的模型数据是否有效)。问题是 StandardContact.PropertyChanged 处理程序是在 IDataErrorInfo 的验证代码之前调用的,因此“Save”命令的 CanExecute 不能正确反映该命令是否可以执行。我正在寻找的是,在 CanExecute 执行之前,应该运行 IDataErrorInfo 验证,以便 CanExecute 将查询模型中的最新数据并决定是否启用它。这是我正在使用的示例代码
模型:
public class StandardContact :EntityBase, IDataErrorInfo
{
public virtual string Name
{
get { return _name; }
set { SetField(ref _name, value, () => Name); }
}
//...
//Validators
public string this[string propertyName]
{
get
{
string error = null;
//....
}
视图模型
public class SContactEditViewModel : NotificationObject, INavigationAware
{
//....
StandardContact.PropertyChanged +=
new PropertyChangedEventHandler(StandardContact_PropertyChanged);
void StandardContact_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
//Requery if command can execute
SaveNewCommand.RaiseCanExecuteChanged();
}
}