【发布时间】:2017-08-28 13:22:02
【问题描述】:
我想根据标准规则验证文本框的值,其中几个是最小值和最大值。问题是,我需要配置这些值(例如在设置文件中)。
我有验证规则:
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 中,适当的 ViemModel 放置在控件 DataContext 中。
问题是:属性 IntervalMinValue 未绑定到验证规则。如果我手动设置它 - 可以正常工作,但不能使用绑定。
【问题讨论】:
-
如果您需要可配置的
Min和Max,让它们查看模型属性以及Value。 -
是的,它们在虚拟机中。但我无法将 VM 属性绑定到验证 Min、Max DPs。
标签: c# wpf data-binding dependency-properties