1
私のアプリケーションにDatePickerがあります。私は(例えばddmmrrrr、DDMM、ddmmrr ...) 私が作ったDateTimeConverterをカレンダーから(例えば2016年10月18日)、選択したDateTimeをスタンダールDateTime書式を書いたり、カスタムフォーマットを書きたいと思います:WPF DatePicker - カスタム日時書式を書き込む
class DateTimeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
DateTime emptyDateTime;
if (DateTime.TryParse(value.ToString(), out emptyDateTime) && emptyDateTime == DateTime.MinValue)
return DateTime.Now;
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
int valueNumber;
string valueStr = value.ToString().Replace(".", "");
if (!int.TryParse(valueStr, NumberStyles.Integer, CultureInfo.InvariantCulture, out valueNumber))
return DateTime.Now;
if (valueStr.Length == 8) //format ddmmrrrr
{
DateTime emptyDateTime;
//for removing empty datetime (01.01.0001)
return DateTime.TryParse(value.ToString(), out emptyDateTime) && emptyDateTime == DateTime.MinValue
? (object) null
: new DateTime(valueNumber%10000, (valueNumber/10000)%100, valueNumber/1000000);
}
if (valueStr.Length == 6) //format ddmmrr
return new DateTime(2000 + valueNumber % 100, (valueNumber/100) % 100, valueNumber/10000);
if (valueStr.Length == 4) //format ddmm
return new DateTime(DateTime.Now.Year, valueNumber % 100, valueNumber/100);
return DateTime.Now;
}
}
をそして、これはあります私の日付ピッカー:
<DatePicker Focusable="True" Grid.Column="4"
Text="{Binding Order.DateTime, Mode=TwoWay, Converter={StaticResource DateTimeConverter}}"
PreviewKeyDown="DatePicker_OnPreviewKeyDown"/>
これは結合のためのプロパティです:
class Order{
public DateTime DateTime { get; set; }
}
は私の問題は、以下のとおりです。 日付ピッカーがnullの場合は、Order.DateTimの値eは01.01.0001です。 フォーマット(ddmmrrrr)を書き込むと、Order.DateTimeの値はDateTime.Nowになります。
どうしたらいいですか。ありがとう
ただし、&&を||に変更する必要があります。文字列を解析できないか、解析できないのにDateTime.MinValueだった場合、DateTime.Nowを返す必要があります – Woozar
@Woozar:ありがとう、私は答えを更新しました – WPFGermany
ありがとうございました。しかし、初期値は01.01.0001です。あなたの例でDateTime.Nowを返すことはありませんが、戻り値。 – bluray