0

「テリトリー」フィールドを含むデータベースレコードをマッピングしているORMオブジェクトをラップするViewModelに裏打ちされたフォームがあります。

このフィールドのビジネスロジックは、「ValidateTerritory」構成フラグによって切り替えられます。フラグがオンになっている場合、フィールドにはテリトリーテーブルの値の1つが含まれている必要があります。この場合、ビューには、これらの領域が設定されたComboBoxが含まれている必要があります。これは簡単に処理できます。データベースから入力されたViewModelにValidTerritoriesプロパティを含め、ComboBoxのItemsSourceをそのプロパティにバインドします。そしてもちろん、ComboBoxのSelectedValueをORMのテリトリーフィールドにバインドします。

問題は、「ValidateTerritory」フラグがオフになっている場合、このフィールドに検証ルールがないことです。これは、制約のない値を含むプレーンテキストフィールドです。この場合、ビューにはTextBoxが含まれ、そのTextプロパティがORMのフィールドにバインドされている必要があります。

問題は、これを処理する最もクリーンな方法は何ですか?その構成オブジェクトの値に基づいて、フォームのコントロールをあるタイプから別のタイプに切り替えますか?

4

1 に答える 1

1

ContentControl'full'データ(つまりContent="{Binding }")にバインドし、(正しいバインディングを持つ)を含むデータテンプレートまたは(ここでもバインディングは)DataTemplateSelectorを含むデータテンプレートを返すaを使用することを検討します。ComboBoxTextBoxDataTemplate

このようにして、検証の問題が発生せず、折りたたまれたコントロールをロードするためのパフォーマンスコストが発生せず、将来、その役割に他のコントロールを含めるための柔軟性が向上します(おそらくAutoComplete)。

于 2012-05-13T11:46:36.343 に答える