2017-02-05 1 views
0

Я программирую в WPF и имея интерфейс, в котором дата изготовления и дата истечения срока действия - два выбора даты. Как я могу установить дату истечения срока действия Выбор даты, чтобы выбрать дату только больше, чем дату mfg?Как связать две даты, так что дата не может быть больше или меньше других.

+0

Можете ли вы показать код? – Sourabh

ответ

0

К сожалению, у datepicker WPF нет свойства минимальной даты, хотя у него есть свойство зависимостей DisplayDateStart. Внутри всплывающей части календаря элемента управления дампинг это свойство скрывает даты до назначенного значения.

Однако пользователи все равно смогут ввести любую дату истечения срока действия, используя часть текстового поля datepicker. Чтобы справиться с этим, вам необходимо проверить свойства SelectedDate обоих датпикеров.

Я прилагается код, который делает оба (для целей данного вопроса, я предположил, что вы не используете MVVM - если вы дайте мне знать):

Во-первых, в XAML, зависимость DisplayDateStart свойство datepicker expiry привязано к свойству SelectedDate зависимости от даты изготовления (таким образом, скрытие недопустимых дат во всплывающем календаре даты истечения срока действия). Поскольку в вашем требовании указано «только больше, чем mfg date», для возврата дня после производственного дня требуется конвертер значений.

<StackPanel> 
    <StackPanel.Resources> 
     <yournamespace:NextDayConverter x:Key="NextDayConverter" /> 
    </StackPanel.Resources> 
    <DatePicker x:Name="ManufacturingDatePicker" 
       SelectedDateChanged="OnSelectedDateChanged" /> 
    <DatePicker x:Name="ExpiryDatePicker" 
       SelectedDateChanged="OnSelectedDateChanged" 
       DisplayDateStart="{Binding 
            ElementName=ManufacturingDatePicker, 
            Path=SelectedDate, 
            Converter={StaticResource NextDayConverter}}" /> 
</StackPanel> 

The NextDayConverter подробно описан ниже:

namespace YourNamespace 
{ 
    using System; 
    using System.Globalization; 
    using System.Windows.Data; 

    public sealed class NextDayConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      if (value != null) 
      { 
       DateTime manufacturingDate = (DateTime)value; 
       DateTime minimumExpiryDate = manufacturingDate.AddDays(1); 
       return minimumExpiryDate; 
      } 
      return Binding.DoNothing; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

Во-вторых, в коде позади, есть обработчик события SelectedDateChanged обоих datepickers. Здесь код подтверждения устанавливает дату истечения срока действия на дату изготовления, если пользователь вводит недействительную дату истечения срока действия (то есть предшествует или равна дате изготовления).

private void OnSelectedDateChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (ManufacturingDatePicker.SelectedDate.HasValue && 
     ExpiryDatePicker.SelectedDate.HasValue && 
     ExpiryDatePicker.SelectedDate <= ManufacturingDatePicker.SelectedDate) 
    { 
     ExpiryDatePicker.SelectedDate = ManufacturingDatePicker.SelectedDate.Value.AddDays(1); 
    } 
} 

Надеюсь, это поможет.

+0

Спасибо, что это работает .. спасибо alot –

+0

Добро пожаловать. –