何かが私にこれを尋ねるためにリンチされるかもしれないと私に言います。そして、事前に長い説明をしてすみません。
私はSilverlight4プロジェクトのコーナーケースのようなものに取り組んでいます。基本的に、私が構築しているのはカスタムフォームビルダーです。
フォームには、さまざまなタイプ(テキスト、整数、電子メールなど)のフィールドがいくつかある場合があります。現在、これらのタイプはすべてField
クラスを拡張していますが、テキストフィールドの場合は長さなどの追加のプロパティがある場合があります。
のコレクションからフィールドを追加および削除することができFieldViewModels
ますFormFieldsManagementViewModel
。つまり、これまでのところ、すべてかなり標準的なものです。
さて、...ユーザーがFieldオブジェクトに対してプロパティを設定するために、UserControl
タイプの依存関係プロパティを持ちDataTemplate
、特定のタイプのフィールドが選択されたときにディッププレイしたいUIを表すがあります。したがって、明確にするために、は、aが選択されたときに表示されるプロパティをUserControl
持っていますが、aが選択されたときに表示されます。と継承元の両方。SingleLineTextTemplate
SingleLineTextFieldViewModel
EmailFieldViewModel
EmailFieldTemplate
SingleLineTextFieldViewModel
EmailFieldViewModel
FieldViewModel
これらの各テンプレートでバインディングを宣言すると、問題が発生します。FieldViewModel
のような基本クラスのプロパティIsRequired
を設定することは非常に有効です(IMHO)が、の長さプロパティに一致するのPosition
バインディングもあります。したがって、私はクラスだけでなく、具象クラスの拡張インターフェースに依存しています。Length
SingleLineTextTemplate
SingleLineTextFieldViewModel
FieldViewModel
先に進む前に、これが機能することを指摘する必要があります。私はそれがそうなるかどうか確信がありませんでした、そして今それはそうするべきであるかどうか、または私がこれをするべきであるかどうかさえわかりません。
これは、バインドのために、動的オブジェクトへのバインドがない場合、および/またはDataTemplateSelector
Silverlightがない場合にのみ実行しています。
明らかに、バインディングシナリオでは基本クラスの代わりにSingleLineTextFieldViewModel
はなりません。私の質問は、これらのオブジェクトをコードではなくマークアップで実際に消費しているので、..これはまだ悪い習慣と見なされていますか?
よろしくお願いします。