[英]Set a RangeValidator Minimum dependent on TextBox Value in WPF
我有一些由范围验证器“控制”的文本框:
public class RangeValidator : ValidationRule
{
public int Min { get; set; }
public int Max { get; set; }
public bool CheckZeroValue { get; set; }
public RangeValidator() { }
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
int Value = 0;
try
{
if (((string)value).Length > 0)
Value = Int32.Parse((String)value);
}
catch (Exception e)
{
return new ValidationResult(false, "Wrong Character - " + e.Message);
}
if (CheckZeroValue && (Value == 0))
return new ValidationResult(true, null);
if ((Value < Min) || (Value > Max))
{
return new ValidationResult(false, String.Format("The range is: {0} - {1}", Min, Max));
}
else
{
return new ValidationResult(true, null);
}
}
}
现在,我想要做的是,当用户更改文本框值时,另一个文本框的 Min 会相应地更改,就像这样..
<TextBox Grid.Row="1" Grid.Column="1" MaxLength="2" Name="FLD_OPEN_SNS_MIN">
<TextBox.Text>
<Binding Path='Fields[(local:EFields)FLD_OPEN_SNS_MIN]'
UpdateSourceTrigger="PropertyChanged"
NotifyOnValidationError="True"
ValidatesOnExceptions="True" >
<Binding.ValidationRules>
<local:RangeValidator Min="10" Max="50"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBox Grid.Row="2" Grid.Column="1" MaxLength="3" Margin="5" >
<TextBox.Text>
<Binding Path='Fields[(local:EFields)FLD_OPEN_SNS_MAX]'
UpdateSourceTrigger="PropertyChanged"
NotifyOnValidationError="True"
ValidatesOnExceptions="True" >
<Binding.ValidationRules>
<local:RangeValidator Min="{Binding ElementName=FLD_OPEN_SNS_MIN,
Path=Text
Converter={StaticResource StringToIntConverter}}" Max="50"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
这不起作用,因为 ValidationRule 类不是 DependencyObject。 有没有办法在不使用背后代码的情况下实现这一点?
这不起作用,因为 ValidationRule 类不是 DependencyObject。 有没有办法在不使用背后代码的情况下实现这一点?
您可以创建一个从 DependencyObject 派生的包装类并公开依赖项属性。 有关详细信息,请参阅以下 TechNet 文章。
WPF:将数据绑定值传递给验证规则: https : //social.technet.microsoft.com/wiki/contents/articles/31422.wpf-passing-a-data-bound-value-to-a-validation-规则.aspx
<TextBox Grid.Row="2" Grid.Column="1" MaxLength="3" Margin="5">
<TextBox.Resources>
<local:BindingProxy x:Key="proxy" Data="{Binding ElementName=FLD_OPEN_SNS_MIN}"/>
</TextBox.Resources>
<TextBox.Text>
<Binding Path='Fields[(local:EFields)FLD_OPEN_SNS_MAX]'
UpdateSourceTrigger="PropertyChanged"
NotifyOnValidationError="True"
ValidatesOnExceptions="True" >
<Binding.ValidationRules>
<local:RangeValidator Max="50"/>
<local:RangeValidator.Wrapper>
<local:Wrapper Min="{Binding Path=Text, Source={StaticResource proxy}, Converter={StaticResource StringToIntConverter}}"/>
</local:RangeValidator.Wrapper>
</Binding.ValidationRules>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.