4

エンティティ フレームワーク (SQL サーバーを使用) エンティティの日付フィールドにバインドされている日付ピッカーを使用している WPF アプリケーションがあります。次のようにバインドします。

<DatePicker x:Name="dtComplete" Style="{StaticResource FTC_DatePicker}" Grid.Column="2" Grid.Row="7" Grid.ColumnSpan="3"                                            
Text="{Binding dtComplete, Mode=TwoWay, ValidatesOnDataErrors=True}"/>

バインディングは正常に機能し、エンティティに更新できます。

私の問題は、基になるデータベース フィールドが null の場合、必要な日付の透かしを選択することですが、その透かしが検証され、日付形式ではないとして返されることです。透かしを保持したいのですが、ユーザーが入力を変更するまで検証トリガーはありません。ValidatesOnDataErrors=Trueまた、ビジネスロジックを評価するために別の場所で使用しているため、保持したいと考えています。

私が何を意味するかを確認するために、日付に null 値を指定して datepicker を使用するフォームを次に示します。検証エラーが表示されます。 wpf datepicker 検証エラー

デバッグ時の出力ウィンドウには、次の検証変換エラーが表示されます。

System.Windows.Data エラー: 7: ConvertBack は値 '' (タイプ 'String') を変換できません。BindingExpression:Path=dtComplete; DataItem='job_BF0D6052EEADCDA3C2B6D1A174D77C322D5AB16A035F214705610767131A80F0' (HashCode=17930557); ターゲット要素は 'DatePicker' (Name='dtComplete') です。ターゲット プロパティは 'Text' (タイプ 'String') です FormatException:'System.FormatException: String は有効な DateTime として認識されませんでした。System.DateTime.Parse (文字列 s、IFormatProvider プロバイダー) で System.Convert.ToDateTime (文字列値、IFormatProvider プロバイダー) で System.Convert.ChangeType (オブジェクト値、型 conversionType、IFormatProvider プロバイダー) で System.Windows.Data.BindingExpression .ConvertBackHelper(IValueConverter コンバーター、オブジェクト値、タイプ sourceType、オブジェクト パラメーター、

ユーザーが入力を変更するまで、誰かがこの検証エラーを取り除くのを手伝ってくれますか?

前もって感謝します

4

2 に答える 2

7

理解した:

私は datePicker のテキスト値にバインドしていたので、透かしテキストを日付として検証しようとしていましたが、実際にすべきことは、次のように selectedDate プロパティにバインドすることでした。

<DatePicker x:Name="dtComplete" Style="{StaticResource FTC_DatePicker}" Grid.Column="2" Grid.Row="7" Grid.ColumnSpan="3"                                                                                        
 SelectedDate="{Binding dtComplete, Mode=TwoWay, ValidatesOnDataErrors=True}" />

これは私が望むように動作するようになりました。日付の透かしを選択してもまだそこにあり、バインディングの日付値が機能します。今ではあまりにも明白です。簡単な修正

于 2013-03-08T19:54:09.890 に答える
1

実際の問題は、datepicker の標準的な動作は、選択した値を使用してカレンダー上の日付を強調表示することです。value プロパティに日付以外の値を入れているため、カレンダーがアクティブ化されたときに何をすべきかわかりません。datepicker カレンダーが開かれたときに発生するイベント「ドロップダウン」があります。開いたら値を今日に設定すると、エラーが削除されます。
私がはっきりしていないのは、最初にそのテキストを表示する方法です。日付ピッカーは、入力された値を検証したと思いました。

于 2013-03-08T17:05:18.077 に答える