2015-10-15 23 views
14

, ben kaynak değerinin güncellemeyle ilgili davranış en az 4 türleri arasında ayırt edebilir:WPF: Bir dönüştürücü ile Doğrulama vs Dönüştürücüler

  • uygun bir değere dönüştürerek (-> güncelleme kaynağı)
  • dönen boş (-> hatasını belirtir)
  • istisna doğrulama kuralını bir istisna atma ve aktive - (-> kaynak güncelleme yok, ama hata eiter göstermez)
  • Binding.DoNothing dönen (> hatasını belirtir)
  • Bir ValidationRule ile 0

, sadece başarı arasında ayırım yapabilirler (-> güncelleme kaynağı) ve başarısızlık (-> kaynak güncelleme yok) ama Binding.DoNothing

ile ilişkili davranış taklit edemez mi var ValidationRule'u Binding.DoNothing dönüştürücüler davranışına benzer bir şekilde kullanma yolu?

+0

Bağlamanın güncellenmediğinden ve ui öğesinin stilinin değiştirilmemesini istiyor musunuz? –

cevap

8

Dönüştürücüler ve Doğrulama Kurallarının amaçları oldukça farklıdır. Dönüştürücüler bir değer alır ve diğerine dönüştürür. Bahsettiğiniz 4 vaka, dönüşüm için yeterince yaygındır: do it; boş olduğunu söyle; patlamak; aldırmamak. Ancak ValidationRules, evet/hayır şeylerdir - geçerli ya da değillerdir. Bir "göz ardı etme" seçeneğinin olması mantıklı olsa da, biri yoktur.

En yakın semantik, kurucuya IsValid = true'u ayarlamak olacaktır, ancak tam olarak istediğiniz gibi değildir.

Özel durumlara ihtiyacınız varsa, deneyin ve diğer mantığın patlayacağı son düşünce var. Düşünebildiğim tek şey ValidationRule'de bir tür kontrol olup, istenmeyen bir bağımlılık yarattığınız için oldukça şüpheli, ancak sorunları atlatacaksınız.

if (value is SpecialType) 
{ 
    return new ValidationResult(true, null); 
} 

HTH!

Veya nasıl bir IgnorableValidationRule hakkında GÜNCELLEME?

public class IgnorableValidationRule : ValidationRule 
{ 
    public bool Ignore { get; set; } = false; 

    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     if (Ignore) return new ValidationResult(true, null); 

     return new ValidationResult(false, "Why does everyone ignore me?"); 
    } 
} 

<TextBox.Text> 
    <Binding Path="Data"> 
     <Binding.ValidationRules> 
      <local:IgnorableValidationRule Ignore="True"/> <!-- na na --> 
     </Binding.ValidationRules> 
    </Binding> 
</TextBox.Text> 
+1

Bu durumda bir ValidationRule'ı yok saymak mantıklı olur mu? – Domysee

İlgili konular