Wpf 如果组合框已折叠,则停止验证规则

Wpf 如果组合框已折叠,则停止验证规则,wpf,validation,Wpf,Validation,我有两个组合框-cbo_客户_支付方法和cbo_条款 其中一个cbo_客户_支付_方法项目(账户)要求cbo_条款(30天等)可见,否则其崩溃,我已在cbo_支付_类型_选择更改事件中设置此功能 我已经实现了一个validationRule,用于测试cbo是否不为null&&if selectedValue如果组合框可见,则可以应用仅绑定值的样式: <ComboBox.Style> <Style TargetType="{x:Type ComboBox}">

我有两个组合框-cbo_客户_支付方法和cbo_条款

其中一个cbo_客户_支付_方法项目(账户)要求cbo_条款(30天等)可见,否则其崩溃,我已在cbo_支付_类型_选择更改事件中设置此功能


我已经实现了一个validationRule,用于测试cbo是否不为null&&if selectedValue如果组合框可见,则可以应用仅绑定值的样式:

<ComboBox.Style>
    <Style TargetType="{x:Type ComboBox}">
        <Style.Triggers>
            <Trigger Property="Visibility" Value="Visible">
                <Setter Property="SelectedValue">
                    <Setter.Value>
                        <Binding Path="terms_id" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
                            <Binding.ValidationRules>
                                <local:ValidCbo ErrorMessage="Select Payment Terms" />
                            </Binding.ValidationRules>
                        </Binding>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</ComboBox.Style>


您不能在组合框中设置SelectedValue,否则它会覆盖样式。

谢谢H.B。这正是我想要的:-)顺便说一句,我可以看到您编辑了我的问题并删除了愚蠢的选项卡,我想这样做,但我不知道怎么做,有什么提示吗??thanksVisualStudio:Ctrl+E,D->Autoformat | Alt+单击+拖动鼠标->代码块选择我正试图在StackOverflow上执行此操作!为胜利干杯help@VasilijeBursac:您可以在控件折叠时触发验证,或者手动删除错误。这里有可能有用的方法。我无法给出更具体的建议,因为我以前从未遇到过这个问题(而现在我很少使用WPF)。@VasilijeBursac:我不知道如何触发验证,也许你可以在某处找到答案。如前所述,我将尝试查看
Validation.clearvalid
方法,该方法将删除错误。
public class ValidCbo : ValidationRule
{
    private string _errorMessage;
    public string ErrorMessage
    {
        get { return _errorMessage; }
        set { _errorMessage = value; }
    }


    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        //if (this.ErrorMessage.Contains("Master") |)
        if (value == null )
        {
            // value = null
            return new ValidationResult(false, this.ErrorMessage);
        }
        else
        {
            // Not null
            int selectedValue = (int)value;
            if (selectedValue < 0)
            {
                return new ValidationResult(false, this.ErrorMessage);
            }
            else
            {
                return ValidationResult.ValidResult;
            }
        }
    }
}
<ComboBox.Style>
    <Style TargetType="{x:Type ComboBox}">
        <Style.Triggers>
            <Trigger Property="Visibility" Value="Visible">
                <Setter Property="SelectedValue">
                    <Setter.Value>
                        <Binding Path="terms_id" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
                            <Binding.ValidationRules>
                                <local:ValidCbo ErrorMessage="Select Payment Terms" />
                            </Binding.ValidationRules>
                        </Binding>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</ComboBox.Style>