3

DateTime?メトロスタイルアプリのXAMLでプロパティをバインドできるように、プロパティをDependencyPropertyとして使用しようとしています。

ただし、アプリを(デバッグモードで)実行すると、バインディングエラーが発生し、日付がコントロールに表示されません。

エラー:コンバーターは、タイプ'System.DateTime、mscorlib、Version = 4.0.0.0、Culture = neutral、PublicKeyToken=b77a5c561934e089'の値をタイプ'DateTime>'に変換できませんでした。BindingExpression:Path ='Model.Date' DataItem ='MyProject.Common.ViewModel.TransactionViewModel、MyProject、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null'; ターゲット要素は'MyProject.Controls.DatePicker'(Name ='null'); ターゲットプロパティは「SelectedValue」(タイプ「DateTime>」)です。

依存関係プロパティは次のように定義されます。

public static readonly DependencyProperty SelectedValueProperty =
    DependencyProperty.Register("SelectedValue", 
                                typeof (System.Nullable<System.DateTime>),
                                typeof(DatePicker),
                                PropertyMetadata.Create(default(DateTime?)));

XAMLページでは、次のように使用されます。

<local:DatePicker  
   Margin="0,10" 
   SelectedValue="{Binding Model.Date, Mode=TwoWay}" 
   FontSize="21.333"/>

これを修正し、コントロールに表示される日付を取得して、両方の方法でバインドする方法についてのアイデアはありますか?

4

1 に答える 1

6

問題は、DatePickerがNullableの構文糖衣ではDateTimeない型を予期していることです。からへDateTime?の暗黙の変換はありません。独自のIValueConverterを作成します。一歩下がって質問することができます:DateTimeが必要ですか?存在しない日付を00/00/00として表すことはできますか?DateTime?DateTime

別のオプションは、バインドする前に変換することです。

DateTime dateTime = nullDateTime ?? new DateTime(0, 0, 0, 0, 0, 0); 
于 2012-06-11T10:20:51.343 に答える