2010-04-15 26 views
7

Tôi có một điều khiển với xác nhận nàyWPF ValidationRule Validate khi kiểm soát được nạp

<MyPicker.SelectedItem> 
<Binding Path="Person.Value" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True"> 
    <Binding.ValidationRules> 
    <rules:MyValidationRule ValidationType="notnull"/> 
    </Binding.ValidationRules> 
</Binding> 
</MyPicker.SelectedItem> 

Đây là lớp Validation:

class MyValidationRule : ValidationRule 
{   
private string _validationType; 
public string ValidationType 
{ 
    get { return _validationType; } 
    set { _validationType = value; } 
} 

public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
{    
    ValidationResult trueResult = new ValidationResult(true, null); 

    switch (_validationType.ToLower()) 
    { 
    case "notnull": return value == null ? new ValidationResult(false, "EMPTY FIELD") : trueResult;    
    default: return trueResult; 
    } 
} 
} 

Câu hỏi: Khi tài sản được thay đổi, thì Validate () được gọi là đúng.

Nhưng để gọi phương thức này ngay từ đầu khi MyControl được tạo? Tôi cần phải chứng minh ngay lập tức sau khi khởi tạo nếu có giá trị null trong điều khiển (và hiển thị lỗi xác thực)

Trả lời

16

OK tôi đã giải quyết: Bạn bắt buộc xác thực khi phần tử bị ràng buộc với một thuộc tính đơn giản - ValidatesOnTargetUpdated:

<rules:MyValidationRule ValidatesOnTargetUpdated="True" ValidationType="notnull"/> 
1

Câu trả lời của bạn rất tuyệt ... Tôi chỉ muốn nói điều này.

Tôi có rất nhiều điều khiển để xác thực và rất nhiều quy tắc vì vậy những gì tôi đã làm là tạo một hàm tạo trong lớp validationRule của tôi và đặt ValidatesOnTargetUpdated thành True trong đó.

Bằng cách này tôi không phải đi qua tất cả các trang và điều khiển để thêm thuộc tính này vào quy tắc xác thực.

Bài kiểm tra

public class MyRule : ValidationRule 
{ 
    public MyRule() : base() { ValidatesOnTargetUpdated = true; } 
    ... 
} 

public class MyRule2 : MyRule 
{ 
    public MyRule2() : base() { } 
    ... 
} 
Các vấn đề liên quan