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