我想根据标准规则验证文本框的值,其中一些规则是最小值和最大值。问题是,我需要将这些值可配置化(例如在设置文件中)。
我有验证规则:
public class TextBoxWithIntegerValidation : ValidationRule
{
private Int32RangeChecker _validRange;
public Int32RangeChecker ValidRange
{
get { return _validRange; }
set { _validRange = value; }
}
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
var str = value as string;
if (str == null)
{
return new ValidationResult(false, Resources.TextResources.TextBoxIsEmpty_ErrorMessage);
}
int intValue = -1;
if (!int.TryParse(str, out intValue))
{
return new ValidationResult(false, Resources.TextResources.TextBoxNotIntegerValue_ErrorMessage);
}
if (intValue < ValidRange.Minimum)
{
return new ValidationResult(false,
string.Format(Resources.TextResources.TextBoxValueLowerThanMin_ErrorMessage, ValidRange.Minimum));
}
return new ValidationResult(true, null);
}
}
整数范围检查器:
public class Int32RangeChecker : DependencyObject
{
public int Minimum
{
get { return (int)GetValue(MinimumProperty); }
set { SetValue(MinimumProperty, value); }
}
public static readonly DependencyProperty MinimumProperty =
DependencyProperty.Register("Minimum", typeof(int), typeof(Int32RangeChecker), new UIPropertyMetadata(0));
public int Maximum
{
get { return (int)GetValue(MaximumProperty); }
set { SetValue(MaximumProperty, value); }
}
public static readonly DependencyProperty MaximumProperty =
DependencyProperty.Register("Maximum", typeof(int), typeof(Int32RangeChecker), new UIPropertyMetadata(100));
}
并且文本框验证:
<TextBox>
<TextBox.Text>
<Binding Path="Interval" UpdateSourceTrigger="PropertyChanged" ValidatesOnNotifyDataErrors="True">
<Binding.ValidationRules>
<validationRules:TextBoxWithIntegerValidation>
<validationRules:TextBoxWithIntegerValidation.ValidRange>
<validationRules:Int32RangeChecker
Minimum="{Binding IntervalMinValue}"
/>
</validationRules:TextBoxWithIntegerValidation.ValidRange>
</validationRules:TextBoxWithIntegerValidation>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
将TextBox放置在UserControl中,并在控件DataContext中放置适当的ViemModel。
问题是:属性IntervalMinValue未绑定到验证规则。如果我手动设置它-可以正常工作,但无法使用绑定。