2013-03-03 76 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) 
};