繁体   English   中英

仅当控件可见时运行 WPF 验证(如果控件折叠则禁用验证)

[英]Run WPF Validation only if control is Visible (Disable validation if control is Collapsed)

我想让 WPF 验证仅在正在验证的控件可见时运行。
在我的项目中,根据用户的选择,一些控件是 Collapsed

我有一个仅在没有验证错误时才启用的按钮(我使用 WPF 多值转换器并检查所有控件是否有效 - 所有控件的 HasError 为 false)。

验证是使用 ValidationRules 实现的。

所以,我的目标是验证所有当前可见的控件(仅可见!) ,而不是 Button 因为折叠字段为空而被禁用......
有没有办法让 Validation Error 仅在 control 为 Visible 且 input 为 Invalid 时引发

我在互联网上搜索了几天,但我没有找到任何解决这种情况的方法......

提前致谢! 此致!

如果您使用 xaml 来设置您的规则,那么下面的代码可以满足您的需求。 可见性触发器,无绑定 - 无验证)我仅使用 TextBox 作为示例。 您也可以使用其他方法,将显示元素已隐藏的属性传递给您的 ValidationRule,并在规则中检查它如何将 xaml 中的值绑定到验证规则?

<TextBox Visibility="{Binding IsVisible, Converter={wpfApp1:BoolToVisibilityConverter}}">
        <TextBox.Text>
            <Binding Path="Text" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <wpfApp1:TextValidationRule/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
        <TextBox.Style>
            <Style TargetType="{x:Type TextBox}">
                <Style.Triggers>
                    <Trigger Property="Visibility" Value="Collapsed">
                        <Setter Property="Text" Value="{x:Null}"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>

您可以将属性添加到您的验证规则中,如启用并在验证时使用它(如果未启用,则返回成功验证)。 然后将 XAML 中的该属性绑定到控件的 Visibility 属性或确定控件是否可见的任何内容(即 CheckBox 的 IsChecked 属性)。 编辑:为清晰起见的代码:

<CheckBox Name="chkName" />
<TextBox Visibility="{Binding IsChecked, ElementName=chkName, Convertor...}">
    <TextBox.Text>
        <Binding Path="ModelProperty">
            <Binding.ValidationRules>
                <wpfApp1:TextValidationRule Enabled="{Binding IsChecked, ElementName=chkName}" />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM