wpf - WPF 验证,评估多个 UI 控件
问题描述
我有以下简化的用户界面:一个 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; }
}
}
我想结合其他两个来验证每个输入值。例如,所有文本框都应该有填充值,或者所有文本框都应该是空的。我知道这可以通过这里提到的技术来完成:
问题是我希望验证的触发器是来自所有三个文本框的 LostFocus 事件(我的 UI 也有其他输入控件)。因此,只要焦点保持在这三个文本框之一中,就不应触发验证。最重要的是,错误模板应该标记整个 groupBox(因为实际上只有一个验证),而不是单独标记每个文本框,就像在给定的示例中那样。
有人可以给出如何解决这个问题的想法吗?
解决方案
明显的解决方案是BindingGroup
推荐阅读
- c++ - 使用随机挑选的皇后解决 N-Queen 问题
- html - Main text overlapping over footer
- python - python-crontab:查找现有的 cron 作业给出错误的结果
- python - 函数出错,输出一定是30但不回答问题出在哪里?
- javascript - 如何避免使用 socket.io 更改套接字 ID?
- java - Java泛型 - 遍历从相同父级扩展的未实例化类列表并调用父级方法
- python-3.x - 我有下面的python代码,我面临错误'AttributeError:'Difference'对象没有属性'maximumDifference''
- java - Spring boot Kafka Stream Listener 消息偏移量在重启之间丢失
- php - Laravel - 查询,进行搜索
- c# - 如何用 json lis 填充 DataGridView