2017-06-01 11 views
0

私はDatePickerを持っており、ユーザーが00/00/0000を入力できるようにしたいと考えています。私が00/00/0000を入力した場合、それを受け入れず、DatePickerテキストをヌル/空白に戻します。WPF DatePickerで0/0/0を有効な日付として受け入れる方法はありますか?

DatePickerには、バインドされた値がMM/dd/yyyy形式に変換され、ユーザー入力中にNULL以外の値とConvertsBackがMMddyyyyに変換されるコンバーターも接続されています。

00/00/0000はDateTimeの有効な値ではありませんが、01/01/0001を00/00/0000として表示する方法はありますか?

基本的には、クライアントのニーズに応じて、値は入力されず、値は入力されず、00000000はデータ入力時に値が不明である必要があります。私はそれが理にかなっていないことを知っていますが、私は開発者の仕事の一部である時に、非現実的な要件を満たすために推測します。テキストボックスは簡単なオプションですが、可能であればDatePickerで可能です。

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert 
    If Not ComponentModel.DesignerProperties.GetIsInDesignMode(New DependencyObject) Then 
     If value IsNot Nothing Then 
      Dim str As String = value.ToString 
      Try 
       Dim dt As Date = DateTime.ParseExact(str, "MMddyyyy", New CultureInfo("en-US"), Nothing) 

       Return dt.ToString("MM/dd/yyyy") 
      Catch ex As Exception 
       If str.Trim = "" Then 
        Return Nothing 
       Else 
        Return str 
       End If 
      End Try 

     Else 
      Return Nothing 
     End If 

    End If 
    Return value.ToString 
End Function 


Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack 
    Return System.Convert.ToDateTime(value).ToString("MMddyyyy") 
End Function 
+0

何とかDatePickerが00/00/0000を受け入れるように管理しているとしましょう。さて、大きな疑問は、実際には00/00/00とは何日ですか?うーん、デートではないですね...? (グレゴリオ暦に関して) – elgonzo

+0

DatePickerのSelectedDate値は、DateTime値またはnullにしか設定できません。 00/00/0000はどちらでもありません。 – mm8

+0

注:グレゴリオ暦では、ADの最初の年は1年目(= 1AD)です。 1ADに先行する年は、ゼロ年ではありません。それは1BCです。 – elgonzo

答えて

0

私は00/00/0000を入力した場合、それはそれを受け入れ、再び日付ピッカーのテキストヌル/空白になりません。 DatePickerコントロールのSelectedDateプロパティがDateTime?ですのでです

。つまり、のみ有効なDateTime値またはnull(default(DateTime?))に設定することができます。 00/00/0000はどちらでもありません。

あなたは、あなたが「ABC」または「CDE」へDateTime?intフィールドを設定することができますと同じくらい少し00/00/0000にDateTime?フィールドを設定することはできません。これは単にデータ型の有効な値ではありません。

あなたはより良いあなたにどんなstring値を入力することができますし、必要に応じてこのstringDateTimeに変換TextBoxを使用し、これを行うことができるようにしたい場合。ユーザーがコントロールを使用して、TextBoxと一緒に使用して、ユーザーが日付を選択できるようにします。

+0

私は、これをマスキングするのと同じようなアイデアや、これを実現するための何らかの種類のアイデアを探しています。これを反映するために私の質問を編集しようとしています。カレンダーでテキストボックスを使用する際の情報と提案をありがとう。 – Jay

+0

私の答えで述べた理由で、組み込みのDatePickerコントロールを使用して「完了」することはできません。それで、私はこのコントロールを使用しないことを提案しましたが、例えばTextBoxなどです。 – mm8

関連する問題