2016-12-19 21 views
0

周りの月と日の間違った方法私は与えられたクラスのdateOfBirthのプロパティを表示するには、日付ピッカーを使用しています:日付ピッカー:

<DatePicker Text="{Binding SelectedPerson.DateOfBirth }" /> 

は、私は(日付が正しいことを基本となるクラス(SelectedPerson)から見ることができますつまり、日、月、&年が正しい)、DatePickerでは日と月が逆になります。

したがって、2016年2月1日は、2016年1月1日にDatePickerに表示されます。

私は間違っていますか? ありがとうございます。

+3

DateOfBirthは「DateTime」ですか?ロケールの設定はフォーマットに影響する可能性があります。 NA \ EUの混乱のように見えます。 – icebat

答えて

1

私が間違っ要素への結合を単純なものでした。 Text:

<DatePicker SelectedDate="{Binding SelectedPerson.DateOfBirth}" /> 
+0

これは問題のコードと同じではありませんか? –

+0

質問で「DatePicker Text」が表示されました。ソリューションは "DatePicker SelectedDate"を表示します。間違いをするのはとても簡単です。ありがとう。 – AndyS

-1

私はyou'rが間違っているのかわからないが、回避策として、あなたはDate.ToString()方法(このhere用ドキュメント)を試してみてくださいとあなたの場合SelectedPerson.DateOfBirthDateTimeオブジェクトは、(そうでない場合は、あなたが検討すべきですそれは、単に言って:P)

EDITを:あなたが考慮すべきもう一つは、正しい文化を設定することであるWPFでhere

+1

フォーマットエラーを隠すために日付を文字列に変換してはいけません*。それは単に問題を悪化させます*。間違った変換に対処する代わりに、今では2つの*間違った変換がある可能性があります –

+0

良いヒントがあります。間違って申し訳ありません。 – vhoyer

0

を参照して、明示的に文化を指定していない任意のバインディングは、インバリアントカルチャを使用します。代わりに。つまり、現在の地域の設定を無視して、アメリカの日付と数字の形式を取得します。

これは長年にわたる問題であり、WPFチームは「設計通り」と考えています。 standard workaround

FrameworkElementLanguageプロパティのプロパティメタデータを上書きすることです:

FrameworkElement.LanguageProperty.OverrideMetadata(
    typeof(FrameworkElement), 
    new FrameworkPropertyMetadata(
     XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); 

これは、あなたが任意のUIを表示する前に実行する必要があります - 通常OnStartupイベントで。

残念ながら、これはFrameworkElementから派生した要素の問題のみを解決します。たとえば、Run要素はFrameworkContentElementから派生しているため、この変更の影響を受けません。 FrameworkContentElementのメタデータを上書きすることはできません。すでにオーバーライドされています。

別の方法としては、常にCultureInfo.CurrentCultureに文化を初期化するカスタムバインディングを作成して使用することです:

public class CultureBinding : System.Windows.Data.Binding 
{ 
    public CultureBinding(string path) : base(path) 
    { 
     ConverterCulture = CultureInfo.CurrentCulture; 
    } 

    public CultureBinding() 
    { 
     ConverterCulture = CultureInfo.CurrentCulture; 
    } 
}