0

何かが私にこれを尋ねるためにリンチされるかもしれないと私に言います。そして、事前に長い説明をしてすみません。

私はSilverlight4プロジェクトのコーナーケースのようなものに取り組んでいます。基本的に、私が構築しているのはカスタムフォームビルダーです。

フォームには、さまざまなタイプ(テキスト、整数、電子メールなど)のフィールドがいくつかある場合があります。現在、これらのタイプはすべてFieldクラスを拡張していますが、テキストフィールドの場合は長さなどの追加のプロパティがある場合があります。

のコレクションからフィールドを追加および削除することができFieldViewModelsますFormFieldsManagementViewModel。つまり、これまでのところ、すべてかなり標準的なものです。

さて、...ユーザーがFieldオブジェクトに対してプロパティを設定するために、UserControlタイプの依存関係プロパティを持ちDataTemplate、特定のタイプのフィールドが選択されたときにディッププレイしたいUIを表すがあります。したがって、明確にするために、は、aが選択されたときに表示されるプロパティをUserControl持っていますが、aが選択されたときに表示されます。と継承元の両方。SingleLineTextTemplateSingleLineTextFieldViewModelEmailFieldViewModelEmailFieldTemplateSingleLineTextFieldViewModelEmailFieldViewModelFieldViewModel

これらの各テンプレートでバインディングを宣言すると、問題が発生します。FieldViewModelのような基本クラスのプロパティIsRequiredを設定することは非常に有効です(IMHO)が、の長さプロパティに一致するのPositionバインディングもあります。したがって、私はクラスだけでなく、具象クラスの拡張インターフェースに依存しています。LengthSingleLineTextTemplateSingleLineTextFieldViewModelFieldViewModel

先に進む前に、これが機能することを指摘する必要があります。私はそれがそうなるかどうか確信がありませんでした、そして今それはそうするべきであるかどうか、または私がこれをするべきであるかどうかさえわかりません。

これは、バインドのために、動的オブジェクトへのバインドがない場合、および/またはDataTemplateSelectorSilverlightがない場合にのみ実行しています。

明らかに、バインディングシナリオでは基本クラスの代わりにSingleLineTextFieldViewModelはなりません。私の質問は、これらのオブジェクトをコードではなくマークアップで実際に消費しているので、..これはまだ悪い習慣と見なされていますか?

よろしくお願いします。

4

1 に答える 1

1

私はこれに問題はありません-私は過去に同じまたは同様のことをしました。

がのインスタンスであるSingleLineTextTemplate場合にのみ使用すると仮定すると(おそらく、を型にマッピングすることにより)、問題は発生しません。バインディングフレームワークの復元力があるため、次の場合でも重大な悪影響はありません。不適切なタイプのテンプレートを使用しようとします。DataContextSingleLineTextFieldViewModelDataTemplate

于 2011-10-07T10:37:59.700 に答える