【问题标题】:WPF validation, evaluating more than one UI controlsWPF 验证,评估多个 UI 控件
【发布时间】:2023-03-04 00:51:01
【问题描述】:

我有以下简化的用户界面: 一个 groupBox 基本上三个文本框如下:

<GroupBox Grid.Row="0" Header="Parameter1" Margin="5">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Text="SubParameter1:" Margin="5" HorizontalAlignment="Right"/>
            <TextBox Grid.Column="1" Validation.ErrorTemplate="{StaticResource validationErrorTemplate}" Height="20">
                <TextBox.Text>
                    <Binding Path="Parameter.Parameter1" Mode="TwoWay" UpdateSourceTrigger="LostFocus">
                        <Binding.ValidationRules>
                            <local:ValidationRuleValue1 
                                ValidationStep="RawProposedValue">

                            </local:ValidationRuleValue1>
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <TextBlock Grid.Column="2" Text="SubParameter2:" Margin="5" HorizontalAlignment="Right"/>
            <TextBox Grid.Column="3" Height="20">
                <TextBox.Text>
                    <Binding Path="Parameter.Parameter2" Mode="TwoWay" UpdateSourceTrigger="LostFocus">
                        <Binding.ValidationRules>
                            <local:ValidationRuleValue2 
                                ValidationStep="RawProposedValue">

                            </local:ValidationRuleValue2>
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <TextBlock Grid.Column="4" Text="SubParameter3:" Margin="5" HorizontalAlignment="Right"/>
            <TextBox Grid.Column="5" Height="20">
                <TextBox.Text>
                    <Binding Path="Parameter.Parameter3" Mode="TwoWay" UpdateSourceTrigger="LostFocus">
                        <Binding.ValidationRules>
                            <local:ValidationRuleValue3 
                                ValidationStep="RawProposedValue">

                            </local:ValidationRuleValue3>
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
        </Grid>
    </GroupBox>

我已经使用简单的自定义验证规则对每个文本框进行了验证。以第一个为例。

 public class ValidationRuleValue1 : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        //validation here
        return new ValidationResult(true, "");
    }
}

我的视图模型很简单:

private Parameter parameter;

    public Parameter Parameter
    {
        get
        {
            return parameter;
        }
        set
        {
            if (value != parameter)
            {
                parameter = value;
                OnPropertyChanged("Parameter");
            }
        }
    }

和模型:

public class Model
{
    public class Parameter
    {
        public string Parameter1 { get; set; }
        public string Parameter2 { get; set; }
        public string Parameter3 { get; set; }
    }

}

我想结合其他两个来验证每个输入值。例如,所有文本框都应该有填充值,或者所有文本框都应该是空的。我知道这可以通过here 提到的技术来完成:

问题是我希望验证的触发器是来自所有三个文本框的 LostFocus 事件(我的 UI 也有其他输入控件)。因此,只要焦点保持在这三个文本框之一中,就不应触发验证。最重要的是,错误模板应该标记整个 groupBox(因为实际上只有一个验证),而不是单独标记每个文本框,就像在给定的示例中那样。

有人能告诉我如何解决这个问题吗?

【问题讨论】:

    标签: wpf validation


    【解决方案1】:

    显而易见的解决方案是BindingGroup

    【讨论】:

    猜你喜欢
    • 2012-07-04
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多