2011-07-30 15 views
1

私はシンプルなビューとviewmodelを持っています。後者はIDdataErrorInfoとIValidationExceptionHandlerを実装しています。ビューには、SelectedValueがプロパティにバインドされたコレクションにバインドされたItemsSourceを持つコンボボックスが含まれています。データエラーと例外を検証します。プロパティの変更が変更され、更新されたソースで通知されます。wpf idataerrorinfo combobox

私はデータアノテーションを使用していますが、プロパティは「必須」と「範囲」属性で「装飾」されています。ビューを実行すると、コンボボックスにはエラーアドオンとメッセージが表示されます必須属性。しかし、adornerの上を動かすと、私はメッセージが "値"を "変換できませんでした"であることに気づきました。

プロパティのゲッターで選択された値をチェックし、値が選択されていないと私のメッセージでValidationResultを返す必要がありますか?私は、必須の属性を使用するだけでトリックが行われたと思ったが、コンボボックスでは機能しないようだ。

ご迷惑をおかけして申し訳ございません。

答えて

2

これは、通常、コンボボックスに、SelectedValueが表すタイプのデフォルト値を表す項目がない場合に発生します。

バウンドの選択された値プロパティがstringであると仮定すると、string.emptyのデフォルト値を表すアイテム(ItemsSource内)が存在するはずです。

ので、(おそらく)エラーが価値である「とは、」

は、このことができますなら、私に知らせて変換することができませんでした。

+0

あなたの返事に感謝します。ItemsSourceは、オブジェクトにid(long)とtext(string)の2つのプロパティがあるリストにバインドされています。 idはSelectedValuePathで、DisplayMemberPathはテキストです。私があなたが提案したことをする方法を知っているかわからない? – c95mbq

+0

はい、SelectedValueバインディングにnullまたはstring.emptyがあります。物事を試してみましょう、あなたのIDを "長く?" (Nullable)、あなたのリスト内に{Id = null、Text = " - Please Select - "}のようなデータを持つオブジェクトがあります。 Idの検証エラーだけを返すか、IDの場合はnullを返すようにしてください。ゼロをマスクするその他の防御コードを削除してください。確認してお知らせください... –

+0

ありがとうございます。それはうまくいくように思えますが、dbバッキングがヌル可能ではないフィールドである場合、明らかに少しの作業が必要です。私はリストにダミーのエントリを追加する必要があるよりもあまり侵入しない何かがあることを望んでいた。あなたが方法を考えることができれば、それは素晴らしいだろうが、今のところ私はあなたの答えを受け入れるだろう。ありがとう – c95mbq