簡體   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