2010-04-09 33 views
7

Làm cách nào để áp dụng tính hợp lệ cho bộ công cụ datepicker WPF? Tôi muốn nó bị lỗi nếu ngày không hợp lệ được chọn và trong một số trường hợp tôi có ngày đến và đi, vì vậy tôi muốn xác thực nó để thấy rằng ngày đến không muộn hơn ngày khởi hành.Xác thực bộ chọn ngày WPF

Trả lời

6

Có vẻ như một năm trên xác thực bộ chọn ngày was a problem. Dù sao, bây giờ nó hoạt động.

Tôi không phải là một chuyên gia về WPF, bu tôi sẽ cố gắng cung cấp cho bạn một ý tưởng

viết một quy tắc xác nhận

public class DateExpiredRule : ValidationRule 
{ 

    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     DateTime orderDate = (DateTime)value; 

     return new ValidationResult(orderDate < DateTime.Now, "Please, enter date before Now()"); 
    } 
} 

sau đó bạn có thể gắn nó vào datepicker

<!-- since validation works hand by hand with binding, 
     I use hidden datepicker as binding source --> 
    <WPFToolkit:DatePicker Name="dateProvider" Visibility="Collapsed"> 
    </WPFToolkit:DatePicker> 

    <WPFToolkit:DatePicker Name="notExpired"> 
     <WPFToolkit:DatePicker.SelectedDate> 
      <Binding ElementName="dateProvider" Path="SelectedDate" UpdateSourceTrigger="PropertyChanged"> 
       <Binding.ValidationRules> 
        <local:DateExpiredRule/> 
       </Binding.ValidationRules> 
      </Binding> 
     </WPFToolkit:DatePicker.SelectedDate> 
    </WPFToolkit:DatePicker> 

chỉ định mẫu kiểm soát khi lỗi xác thực xảy ra. Theo mặc định, lỗi xác thực thay đổi màu đường viền. Tôi đã sử dụng chú giải công cụ bổ sung khi chuột bị kiểm soát.

alt text

source code

Về 'chọn để Picker' xác nhận.

Tôi biết rằng người ta có thể sử dụng các thuộc tính tùy chỉnh trong quy tắc xác nhận (xem AgeRangeRule trong msdn chẳng hạn)

Có lẽ bạn nên sử dụng tính năng này như thế này

<local:MaxDateRule MaxDate="{Binding ElementName=DepartureDatePicker, Path=SelectedDate" /> 

nhưng để áp dụng ràng buộc bạn cần làm cho MaxDate DependencyProperty .. bạn chắc chắn nên hỏi một guru;)

Thay vì làm nổi bật, bạn nên cân nhắc việc chặn thay đổi giá trị datepicker (thông qua một số loại sự kiện onpicker 'onchange') và accep hoặc từ chối thay đổi.

+0

Cảm ơn bạn rất nhiều vì đã trả lời .. Tôi có một câu hỏi, làm cách nào để xác thực ngày trong 2 người đặt ngày. Ví dụ: tôi có datepicker ngày và datepicker ngày khởi hành. Làm cách nào để tôi xác thực hai điều này để ngày đến luôn nhỏ hơn (trước), ngày khởi hành? – developer

Các vấn đề liên quan