WPF简单绑定验证,使用红色边框

3

不知道红色验证边框的术语,它有一个吗?

我有一个视图模型,它不继承自IDataErrorInfo。它将int属性绑定到“数量”文本框,因此当输入字母字符时,它会得到红色验证边框。这是完美的行为。红色边框由操作系统进行样式设置,因此很合适。它不需要我继承或实现IDataErrorInfo;它是简单和自动的。

是否有一种方法可以使绑定到字符串的文本框具有相同的行为,在字符串为空(或开始为空)时变为红色。我知道我可以将它们绑定到继承自IDataErrorInfo的对象上来实现这一点,但我想知道是否存在与上述解决方案一样简单的解决方案。

我认为数量的int绑定在setter中键入字母字符时会引发异常。如果在字符串的setter中执行相同操作并将值更改为空,则可以工作,但如果它起始为空,则不会变为红色(因为setter尚未被调用),而且setter会导致Visual Studio首先跳转到调试器,而数量字段不会这样做。

这是可能的吗,还是int验证只是幸运的例外?

编辑:HB下面的解决方案完美地解决了问题,除非您正在使用带有选项卡控件的界面。请参见此SO问题进行详细说明,但简而言之:验证错误是在切换选项卡时丢弃的图层上绘制的。除非验证错误在控件上引发,而该控件位于当前未选定的选项卡上,否则有一个简单的解决方案。突然间,解决方案变得非常复杂,并且在我看来非常糟糕。

编辑:我已经决定datatrigger可能是处理这个问题最简单的方法,而且也很容易重用。

<Style x:Key="TextBoxEmptyError" TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text.Length}" Value="0">
            <Setter Property="BorderBrush" Value="{StaticResource ResourceKey=SemiTransparentRedBrushKey}"/>
            <Setter Property="BorderThickness" Value="2" />
        </DataTrigger>
    </Style.Triggers>
</Style>

1
红色边框是 ErrorTemplate 的一个实例,除此之外我不知道是否有其他适当的术语。 - H.B.
1个回答

2
您可以在文本绑定中添加一个验证规则(ValidationRule),当输入为空字符串时会产生错误,将ValidatesOnTargetUpdated设置为true,使其立即进行验证。请参考ValidationRule

看起来很有前途。不过,我认为这可能是一个更好的验证规则链接:http://msdn.microsoft.com/en-us/library/ms753962.aspx - Kyeotic
@HB 这有点像一个子问题,但是绑定验证规则是否可能?例如,将某些解释的可见性绑定到validation=true? - Kyeotic
@Tyrsius:你需要在规则上拥有一些属性,然后该属性可以包含一个继承自“DependencyObject”的类的实例,因为规则本身不能具有依赖属性,它不继承该类,因此不支持绑定。 - H.B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接