我想实现在winforms中模拟Errorprovider的验证机制。 我试图使用IDataErrorInfo但问题是它试图在表单加载上执行验证。我的要求是我需要点击页面上的按钮进行验证。 还有其他更好的方法在WPF中执行验证吗?
答案 0 :(得分:2)
听起来你已经验证了它现在很简单 - 防止它在需要之前进行验证。在实现IErrorInfo的类上放置一个bool属性:
public bool IsReadyToValidate {get;set;}
每个属性中的
public object SomeProperty
{
get {return _someProperty;}
set
{
if(_someProperty == value) return;
_property = value;
if(IsReadyToValidate)
//do validation
或者如果您使用基于属性的验证:
[CustomMethodValidator("ValidateSomeProperty")]
public string SomeProperty
{
if(_someProperty == value) return;
set
{
if(_property == value)
return;
_property = value;
RaisePropertyChanged(() => SomeProperty);
}
}
private bool ValidateSomeProperty()
{
bool isValid = true;
if(IsReadyToValidate)
//do validation
return is valid;
单击按钮,将IsReadyToValidate设置为true并重新生效。这一切都取决于您的实现。 可能是这样的方法吗?
public void Validate()
{
foreach (var prop in PropertiesWithValidators[GetType()])
ValidateProperty(prop.Name);
HasErrors = _errorDictionary.Count > 0;
RaisePropertyChanged(() => Error);
}
或者你可以做一些粗暴的方式,比如在你翻转标志以验证后重新填充属性
public void Validate()
{
IsReadyToValidate = true;
//now it will validate:
SomeProperty = SomeProperty;