如何抑制 属性 的 INotifyDataErrorInfo 验证
How to suppress INotifyDataErrorInfo validation for a Property
我有一个 class 工具 INotifyDataErrorInfo
我有一些带有错误通知的属性。例如,
public class Request : INotifyPropertyChanged, INotifyDataErrorInfo
{
public string LineOfBusinessIdentifier
{
get { return lineOfBusinessIdentifier; }
set
{
lineOfBusinessIdentifier = value;
ValidateLineOfBusiness();
NotifyPropertyChanged();
}
}
// ValidateLineOfBusiness() Implementation for validation.
}
这个 class 被许多其他 class 继承。一切正常。现在我有一个地方不想在 UI 中显示特定操作的通知,并且在操作后需要通知。无论如何我可以抑制通知。
如果 ValidatesOnNotifyDataErrors(自 .Net 4.5 起引入)设置为 false,则绑定不会检查并报告错误。默认值为 true
"{Binding Path=LineOfBusinessIdentifier, ValidatesOnNotifyDataErrors=False}"
也可以删除 Validation.ErrorTemplate(在视图中隐藏错误通知)并在触发器中重置它 setter
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
<!--need custom error template-->
<Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorTemplate}""/>
这不会禁用验证,只会隐藏错误的视觉指示器
从 Request 派生的 viewModel 可以覆盖 GetErrors 方法(如果它是虚拟的)并在某些情况下禁用 LineOfBusinessIdentifier 属性 通知:
伪代码:
override GetErrors(string propertyName)
{
if (someCondition)
return base.GetErrors().Where(prop != LineOfBusinessIdentifier)
else
return base.GetErrors()
}
我有一个 class 工具 INotifyDataErrorInfo
我有一些带有错误通知的属性。例如,
public class Request : INotifyPropertyChanged, INotifyDataErrorInfo
{
public string LineOfBusinessIdentifier
{
get { return lineOfBusinessIdentifier; }
set
{
lineOfBusinessIdentifier = value;
ValidateLineOfBusiness();
NotifyPropertyChanged();
}
}
// ValidateLineOfBusiness() Implementation for validation.
}
这个 class 被许多其他 class 继承。一切正常。现在我有一个地方不想在 UI 中显示特定操作的通知,并且在操作后需要通知。无论如何我可以抑制通知。
如果 ValidatesOnNotifyDataErrors(自 .Net 4.5 起引入)设置为 false,则绑定不会检查并报告错误。默认值为 true
"{Binding Path=LineOfBusinessIdentifier, ValidatesOnNotifyDataErrors=False}"
也可以删除 Validation.ErrorTemplate(在视图中隐藏错误通知)并在触发器中重置它 setter
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
<!--need custom error template-->
<Setter Property="Validation.ErrorTemplate" Value="{StaticResource ErrorTemplate}""/>
这不会禁用验证,只会隐藏错误的视觉指示器
从 Request 派生的 viewModel 可以覆盖 GetErrors 方法(如果它是虚拟的)并在某些情况下禁用 LineOfBusinessIdentifier 属性 通知:
伪代码:
override GetErrors(string propertyName)
{
if (someCondition)
return base.GetErrors().Where(prop != LineOfBusinessIdentifier)
else
return base.GetErrors()
}