C# 使用INotifyDataErrorInfo进行Mvvm模型验证
我的模型实现了INotifyDataErrorInfo接口来验证它的属性,它工作得很好,但问题是,属性HasErrors默认为false,因此当我第一次运行我的应用程序并单击save form为空时,视图不会出现任何错误,数据也会被保存 这是我的viewmodel的剪贴画C# 使用INotifyDataErrorInfo进行Mvvm模型验证,c#,wpf,mvvm,inotifydataerrorinfo,C#,Wpf,Mvvm,Inotifydataerrorinfo,我的模型实现了INotifyDataErrorInfo接口来验证它的属性,它工作得很好,但问题是,属性HasErrors默认为false,因此当我第一次运行我的应用程序并单击save form为空时,视图不会出现任何错误,数据也会被保存 这是我的viewmodel的剪贴画 public LoggingViewModel() { _loggingCommand = new RelayCommand(checkCredentials, canExecuteLogginForm); _
public LoggingViewModel()
{
_loggingCommand = new RelayCommand(checkCredentials, canExecuteLogginForm);
_logingModel = new LoggingModel();
// I raise this event in the 'OnErrorsChanged' method in the model,
// so my ViewModel can subscribe and check the 'HasErrors' property.
_logingModel.FormIsValid += (o, e) => _loggingCommand.RaiseCanExecuteChanged();
}
private bool canExecuteLogginForm()
{
return !_logingModel.HasErrors;
}
您如何在应用程序中处理这种情况
有关详细信息,我创建了此回购。视图模型逻辑正确。 问题在于模型内的验证逻辑,当hasrerrors=true时,该逻辑返回hasrerrors=False 看看您是如何设置/返回/评估HASSERRORS的。 您正在验证属性get上的模型吗
public bool HasErrors
{
get
{
bool hasErrors = false; // Default true here?
// Validation logic ...
return hasErrors;
}
}
您是否将HasError值存储在属性中,并在其他地方进行设置
public LoggingModel()
{
HasErrors = true; // Default true here?
}
public bool HasErrors { get; set; } // Gets set via validation logic
只是一些想法,就像我说的,如果你能展示你如何处理INotifyDataErrorInfo验证的结构,我可以给出一个更好的答案。由于LogginModel实际上处于无效状态,你应该在它的构造函数中调用ValidateForm方法,将它实际设置为这种状态,并填充_errors字典,以便处理HasErrors属性返回true,因为它应该:
public class LoggingModel : PocoBase
{
public LoggingModel()
{
ValidateForm();
}
[Display(Name = "Name")]
[MaxLength(32), MinLength(4)]
public string UserName
{
get { return GetValue<string>(); }
set { SetValue(value); }
}
[Required]
public string Password
{
get { return GetValue<string>(); }
set { SetValue(value); }
}
}
您是否可以更新您的代码,以便默认情况下HasErrors为True?这或在LogginModel构造函数中强制验证?HasErrors是INotifyDataErrorInfo接口的成员,当表单中没有错误时,它应返回false。如何强制验证?