2017-02-05 1 views

答えて

0

残念ながら、WPF datepickerには最低限の日付プロパティはありませんが、DisplayDateStart依存プロパティがあります。 datepickerコントロールのカレンダーポップアップ部分では、このプロパティは割り当てられた値より前の日付を非表示にします。

ただし、ユーザーはdatepickerのテキストボックス部分を使用して有効期限を入力することができます。これを処理するには、両方のdatepickerのSelectedDateプロパティを検証する必要があります。 、

まずXAMLでDisplayDateStart依存性: - 私は(あなたが私に知らせている場合は、この質問の目的のために、私はあなたがMVVMを使用していないと仮定している)の両方を行うコードを添付しました

有効期限datepickerのプロパティは、製造日付ピッカーのSelectedDate依存性プロパティにバインドされています(したがって、有効期限付き日付ピッカーのカレンダーポップアップで無効な日付が表示されません)。あなたの要件には「製造年月日を超えて」と記載されているため、製造者の翌日には値コンバーターが返されなければなりません。

<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> 

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(); 
     } 
    } 
} 

第二に、背後にあるコードでは、両方のdatepickersのSelectedDateChangedイベントのハンドラがあります。検証コードは、無効な有効期限(すなわち、製造日の前またはそれに等しい)をユーザが入力した場合に、有効期限を製造日に設定する。

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

あなたは大歓迎です。 –

関連する問題