2011-08-23 3 views
0

MVFT WPF 응용 프로그램에 WPFToolkit을 사용하고 시작 날짜를 기준으로 종료 날짜의 차단 날짜를 설정하려고합니다.끝 날짜는 시작 날짜보다 작을 수 없습니다. (WPFToolkit DatePicker)

예 1 : 2

<toolkit:DatePicker SelectedDate="{Binding StartDate}"></toolkit:DatePicker> 

예 :

<toolkit:DatePicker SelectedDate="{Binding EndDate}"> 
    <toolkit:DatePicker.BlackoutDates> 
      <toolkit:CalendarDateRange Start="1/1/2000" End="{Binding StartDate}" /> 
    </toolkit:DatePicker.BlackoutDates> 
</toolkit:DatePicker> 

내가 "는"이 수 없다는 오류를 얻을 나는이 작업을 수행하려면 어떻게

바인딩?

답변

1

나는이 동작을 원하는 경우 하나의 End 속성이 DependencyProperty하지 툴킷처럼 보이기 때문에 당신이 당신의 자신의 DatePicker를 구축해야합니다 생각, 그래서 End 속성은 제가했습니다 바인딩

을 가리킬 수 없습니다 이전에 StartDateEndDate 뒤에 오는 것을 원하지 않았던 곳에서 나는 similar situation을 가지고 있었고 유효하지 않은 경우 날짜 필드 주위에 빨간색 테두리를 넣는 유효성 검사 오류를 사용하여 끝 냈습니다.

0

두 개의 날짜 필드가 서로 조정되어야하는 동일한 작업을했습니다. 또한 날짜 유효성 검사 (예 : 유효성 검사를 시행하지 않을시기)와 함께 구현해야하는 다른 비즈니스 논리도있었습니다.

이 기능을 사용하려면 WPF DataValidation 규칙을 사용했습니다.

public class ValidateDate : ValidationRule 
    {  
     public DateTime EndDate { get; set; } 

     /// <summary> 
     /// Validates date is valid 
     /// </summary> 
     /// <param name="value"></param> 
     /// <param name="cultureInfo"></param> 
     /// <returns></returns> 
     public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
     { 
      // Return if null 
      if (value == null) 
      { 
       return new ValidationResult(true, null); 
      } 

      DateTime t; 
      if (!DateTime.TryParse(value.ToString(), out t)) 
       return new ValidationResult(false, null); 

      if(t == null) 
      { 
       return new ValidationResult(true, null); 
      } 

      if (t.Date < EndDate) 
      { 
       string message = "Invalid Date"; 
       return new ValidationResult(false, message); 
      } 
      else 
      { 
       return new ValidationResult(true, null); 
      } 
     } 

다음은 코드 뒤에 적용되는 바인딩입니다.

System.Windows.Data.Binding b1 = BindingOperations.GetBinding(dpMyDate, 
                     DatePicker.SelectedDateProperty); 

b1.ValidationRules.Clear(); // Clear as I reuse them 
ValidateDate vd = new ValidateDate(); 
vd.EndDate = datePickerEndDate.SelectedDate; 
b1.ValidationRules.Add(vd); 

이 방법을 사용하면 사용자가 잘못된 날짜를 선택하지 못하도록하고 다음과 같이 유효하지 않은 날짜 선택기에서 스타일을 설정할 수 없습니다.

<Style TargetType="{x:Type DatePicker}">    
      <Setter Property="Width" Value="110"/> 
      <Setter Property="Margin" Value="5" /> 
      <Setter Property="HorizontalAlignment" Value="Left"/> 
      <Setter Property="VerticalAlignment" Value="Center"/> 
      <Setter Property="Text" Value="No Date" /> 
      <Style.Triggers> 
       <Trigger Property="Validation.HasError" Value="true"> 
        <Setter Property="BorderBrush" Value="Red"/> 
        <Setter Property="BorderThickness" Value="1" /> 
        <Setter Property="Foreground" Value="Red" /> 
        <Setter 
         Property="ToolTip" 
         Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
관련 문제