Ý định của Trình biến đổi và ValidationRules khá khác nhau. Người chuyển đổi lấy một giá trị và biến nó thành một giá trị khác. 4 trường hợp bạn đề cập là đủ phổ biến để chuyển đổi: làm điều đó; nói nó là null; thổi lên; bỏ qua. Tuy nhiên ValidationRules là có/không có thứ gì - chúng hợp lệ hoặc không. Mặc dù có thể có tùy chọn "bỏ qua" nhưng không có tùy chọn nào.
Ngữ nghĩa gần nhất sẽ là đặt IsValid = true
trong hàm tạo, nhưng nó không chính xác những gì bạn muốn.
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
try
{
// try normal setup/validation
}
catch
{
// handle exceptions, return false
}
// decide if you want to return false
// return true (equivalent to nothing/ignore)
return new ValidationResult(true, null);
}
Tư tưởng cuối cùng là nếu bạn cần trường hợp đặc biệt và thử hoặc bắt hoặc logic khác sẽ phát nổ. Điều duy nhất tôi có thể nghĩ đến là kiểm tra kiểu trong ValidationRule, điều này khá đáng ngờ vì bạn đang tạo ra một sự phụ thuộc không mong muốn, nhưng sẽ bỏ qua các vấn đề. tức là
if (value is SpecialType)
{
return new ValidationResult(true, null);
}
HTH!
CẬP NHẬT
Hoặc làm thế nào về một IgnorableValidationRule
?
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>
Nguồn
2015-10-22 14:28:09
Bạn có muốn gắn kết không được cập nhật và kiểu phần tử ui không bị thay đổi? –