[英]WPF Validation Rule on ComboBox calling the Setter of binded propery twice
我有一个这样的 ComboBox:
<ComboBox Name="TipoVisitante" ItemsSource="{Binding TiposVisitante}" SelectedValue="{Binding TipoVisitante}" Style="{StaticResource ComboBoxStyle}">
<ComboBox.Text>
<Binding Path="TipoVisitante" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<validations:SimpleIsRequiredValidation/>
</Binding.ValidationRules>
</Binding>
</ComboBox.Text>
</ComboBox>
这个 ComboBox 绑定到 ViewModel 的 TipoVisitante 属性。 TipoVisitante 变量如下所示:
private string _TipoVisitante;
public string TipoVisitante {
get =>_TipoVisitante;
set {
if (ValidarTipoVisita(value) == true) {
_TipoVisitante = value;
OnPropertyChanged();
}
else {
MessageBox.Show("YA EXISTE UNA VISITA ÍNTIMA ACTIVA", "VISITA INTIMA ACTIVA", MessageBoxButton.OK, MessageBoxImage.Error);
_TipoVisitante = null;
OnPropertyChanged();
}
}
}
设置 TipoVisitante 后,我想使用返回 true 或 false 的方法检查该值是否有效,具体取决于值是否有效。 如果值无效,我会显示一条消息,指出该值无效。 问题是,由于 ComboBox 上的规则验证,TipoVisitante 变量的设置属性被调用两次,错误消息显示两次。 ComboBox 的验证规则如下所示:
public class SimpleIsRequiredValidation: ValidationRule {
public override ValidationResult Validate(object value, CultureInfo cultureInfo) {
if (!string.IsNullOrEmpty(value ? .ToString()))
return new ValidationResult(true, null);
else
return new ValidationResult(false, null);
}
}
验证规则检查用户是否选择了 combobox 的某个值,检查文本是 null 还是空字符串。 同样在我后面的代码中我有这个:
private void Button_Click(object sender, RoutedEventArgs e) {
if (string.IsNullOrWhiteSpace(TipoVisitante.Text))
TipoVisitante.Text = "";
}
此方法是按钮的 Click 属性。 单击按钮时,我检查用户是否未选择 ComboBox 的某些值,我将文本设置为空字符串以触发验证并在 ComboBox 中显示红色边框。
如何避免绑定变量 TipoVisitante 的 setter 被调用两次?
尝试添加额外的属性来检查它是否被调用过一次,然后使用它来阻止调用它两次。
解决方案是将验证从 ComboBox.Text 更改为 ComboBox.SelectedValue。 之后,在按钮 Click 操作中,将TipoVisitante.Text = ""
更改为TipoVisitante.SelectedValue = null
。 这样做效果很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.