繁体   English   中英

WPF Validation Rule on ComboBox 两次调用绑定属性的Setter

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM