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



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

我有一个视图模型,不从IDataErrorInfo继承。它将int属性绑定到"quantity"文本框,因此当输入alpha字符时,它会得到一个红色的验证边框。这是完美的行为。红色边框是由操作系统设计的,所以很合适。它不要求我继承或实现IDataErrorInfo;

是否有一种方法可以让绑定到字符串的文本框具有相同的行为,当字符串为空(或开始为空)时变为红色。我知道我可以将它们绑定到从IDataErrorInfo继承的对象上,但是我想知道是否存在像上面那样简单的解决方案。

我认为当您键入alpha字符时,对quantity的int绑定会在setter中抛出异常。如果您将值更改为空,则在字符串的setter中执行相同的操作,但如果它开始为空(因为尚未调用setter),则不会显示红色,并且setter会导致visual studio首先跳转到调试器,这是quantity字段不会做的。

这是可能的,还是int验证只是一个幸运的异常?

编辑: HB的解决方案下面工作完美,除非你是在一个tab控件的界面上工作。请参阅这个问题的详细解释,但这里是简短的:验证错误被绘制在切换选项卡时丢弃的层上。对此有一个简单的解决方案,除非在控件位于当前未选中的选项卡上时引发验证错误。突然之间,解决方案变得非常复杂,而且在我看来,非常粗糙。

编辑:我已经决定一个数据触发器可能是最简单的方法来处理这个问题,它也很容易重用。

<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>

您可以将ValidationRule添加到文本绑定中,该文本绑定在空字符串输入时给出错误,以使其立即验证设置ValidatesOnTargetUpdated为true

最新更新