Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅当控件可见时运行WPF验证(如果控件已折叠,则禁用验证)_C#_Wpf_Validation_Data Binding_Validationrules - Fatal编程技术网

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

C# 仅当控件可见时运行WPF验证(如果控件已折叠,则禁用验证),c#,wpf,validation,data-binding,validationrules,C#,Wpf,Validation,Data Binding,Validationrules,我只想在正在验证的控件可见时运行WPF验证。 在我的项目中,根据用户的选择,一些控件被折叠 我有一个按钮,只有在没有验证错误时才启用(我使用WPF多值转换器并检查所有控件是否有效-所有控件的HasError为false) 验证是使用ValidationRules实现的。 因此,我的目标是验证所有当前可见的控件(仅可见!),而不是因为折叠字段为空而禁用按钮… 只有当控件可见且输入无效时,是否有方法使验证错误上升? 我在互联网上搜索了几天,但没有找到任何解决这种情况的方法… 提前谢谢!致以最良好的祝

我只想在正在验证的控件可见时运行WPF验证。
在我的项目中,根据用户的选择,一些控件被折叠

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

验证是使用ValidationRules实现的。

因此,我的目标是验证所有当前可见的控件(仅可见!)
,而不是因为折叠字段为空而禁用按钮…
只有当控件可见且输入无效时,是否有方法使验证错误上升?

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


提前谢谢!致以最良好的祝愿

如果您使用xaml来设置规则,下面的代码可以满足您的需要。触发器的可见性,无绑定-无验证)我只使用TextBox作为示例。 此外,您还可以使用其他方法,将显示元素隐藏的属性传递给ValidationRule,并在规则内检查它


如果您使用xaml来设置规则,下面的代码将执行您想要的操作。触发器的可见性,无绑定-无验证)我只使用TextBox作为示例。 此外,您还可以使用其他方法,将显示元素隐藏的属性传递给ValidationRule,并在规则内检查它


您可以向验证规则添加属性,如Enabled,并在验证时使用它(如果未启用,则返回successfull validation)。 然后将XAML中的属性绑定到控件的Visibility属性或决定控件是否可见的任何属性(即复选框的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>

您可以向验证规则添加属性,如Enabled,并在验证时使用它(如果未启用,则返回successfull validation)。 然后将XAML中的属性绑定到控件的Visibility属性或决定控件是否可见的任何属性(即复选框的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>


如何添加验证规则?来自xaml?@Lana是的,我从xaml添加了验证规则。您如何添加验证规则?来自xaml?@Lana是的,我从xaml添加了验证规则。您不能直接将属性绑定到ValidationRule@Shadowed非常感谢您的回答!不幸的是,正如Lana所说,您不能直接将属性绑定到ValidationRule,因为ValidationRule不会从DependencyObject继承。。。这个答案使用了相同的想法,但更详细地介绍了如何克服这个问题:您不能直接将属性绑定到ValidationRule@Shadowed非常感谢您的回答!不幸的是,正如Lana所说,您不能直接将属性绑定到ValidationRule,因为ValidationRule不会从DependencyObject继承。。。这个答案使用了相同的想法,但更详细地介绍了如何克服这个问题:非常感谢你的回答!我尝试过这种方法,但是控件仍然有
验证。HasError
设置为
True
,即使它已折叠,因此我的按钮仍然被禁用。你知道我该怎么做吗?我原以为像您那样删除验证会将
验证.HasError
重置为
False
,但不幸的是,事实并非如此……非常感谢您的回答!我尝试过这种方法,但是控件仍然有
验证。HasError
设置为
True
,即使它已折叠,因此我的按钮仍然被禁用。你知道我该怎么做吗?我认为像您那样删除验证会将
验证.HasError
重置为
False
,但不幸的是,情况并非如此。。。