2013-03-03 104 views
3

我有一個DatePicker,因此用戶可以選擇日期。WPF DatePicker僅顯示可用日期

我希望用戶只選擇可用的日期。 和速效日期都存儲在一個List

到目前爲止,我有這樣的:

<DatePicker x:Name="DatePicker" 
    SelectedDate="{Binding SearchEngineCompassLogView.DateSearch, 
     Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    DataContext="{StaticResource CompassLogView}"> 
</DatePicker> 
+1

會不會使用日期選取的是在這種情況下混亂。難道你不能用簡單的下拉列表/組合? – 2013-03-03 14:46:31

回答

1

可以使用BlackoutDates財產,但在這個解決方案必須指定DisplayDateStartDisplayDateEnd

BlackoutDates是無法選擇的日期的集合(msdn)。

例子:

<DatePicker x:Name="datePicker" 
        Loaded="datePicker_Loaded" 
        DisplayDateStart="2000/01/01" 
        DisplayDateEnd="2050/01/01" 
        /> 

Loaded事件處理:

private void datePicker_Loaded(object sender, RoutedEventArgs e) 
{ 
    DatePicker picker = sender as DatePicker; 

    if (picker.DisplayDateStart == null || picker.DisplayDateEnd == null) return; 

    picker.BlackoutDates.Clear(); 

    DateTime start = picker.DisplayDateStart.Value; 
    DateTime end = picker.DisplayDateEnd.Value; 

    while (start <= end) 
    { 
     if (!availableDates.Contains(start)) 
     { 
      picker.BlackoutDates.Add(new CalendarDateRange(start, start)); 
     } 
     start = start.AddDays(1); 
    } 
} 

收集可用日期:

List<DateTime> availableDates = new List<DateTime> 
{ 
    new DateTime(2013, 03, 01), 
    new DateTime(2013, 03, 02), 
    new DateTime(2013, 03, 03), 
    new DateTime(2013, 03, 31), 
    new DateTime(2013, 02, 01), 
    new DateTime(2013, 02, 02), 
    new DateTime(2013, 05, 01), 
    new DateTime(2013, 05, 02) 
};