Im Xaml müssen im Databinding ValidatesOnDataErrors=True, NotifyOnValidationError=True gesetz sein
IDataErrorInfo implementierung:
ganz einfach (in viewmodelbaseclass z.b.)public virtual string this[string columnName] => null; // nothing to validate here
public virtual string Error => EditorResources.DefaultErrorMessage;
oder dann ausimplementiert:
public override string this[string columnName]
{
get
{
switch (columnName)
{
case nameof(MinNumericValue):
case nameof(MaxNumericValue):
return _validateMinMax(_doNumericValidation, MinNumericValue, MaxNumericValue);
case nameof(MinDecimalValue):
case nameof(MaxDecimalValue):
return _validateMinMax(_doDecimalValidation, MinDecimalValue, MaxDecimalValue);
case nameof(MinDateTimeValue):
case nameof(MaxDateTimeValue):
return _validateMinMax(_doDateTimeValidation, MinDateTimeValue, MaxDateTimeValue);
default:
return null;
}
}
}
die Propery Setter:
public int? MaxNumericValue{
get => _maxNumericValue;
set
{
_maxNumericValue = value;
_doNumericValidation = true;
OnPropertyChanged();
OnPropertyChanged(nameof(MinNumericValue));
_doNumericValidation = false;
IsModified = true;
}
}
public int? MinNumericValue
{
get => _minNumericValue;
set
{
_minNumericValue = value;
_doNumericValidation = true;
OnPropertyChanged();
OnPropertyChanged(nameof(MaxNumericValue));
_doNumericValidation = false;
IsModified = true;
}
}
usw.
einfache Min Max Validierung:
private string _validateMinMax <T>(bool doValidation, T? min, T? max) where T: struct, IComparable<T>
{
if (!doValidation || null == min || null == max) return null;
if (0 >= min.Value.CompareTo(max.Value))
return null;
return EditorResources.MinMax_Validation;
}
auch gut:
https://www.codeproject.com/Tips/858492/WPF-Validation-Using-IDataErrorInfo
No comments:
Post a Comment