2011-11-11 9 views
1

は、だから私はこれに似てオブジェクトツリーがあります。オブジェクトのツリーをユーザーに設定する方法を提供する最も簡単な方法は何ですか?

AbstractA 
    string PropA 
    int PropB 
    AbstractC PropC 
    AbstractD PropD 

AbstractB 
    string PropA 
    string PropB 

AbstractC : AbstractB 
    string PropC 

AbstractD : AbstractB 
    int PropC 

ConcreteA1 : AbstractA 
    int PropE 

ConcreteC1 : AbstractC 
    bool PropD 

ConcreteC2 : AbscractC 
    decimal PropD 

ConcreteD1 : AbstractD 
    string PropD 
ConcreteD2 : AbstractD 
    long PropD 

を私がいる問題は、オブジェクトツリーを構成する能力をユーザに提供するための包括的な方法を見つけることです。私の抄録を拡張する複数の具体的なクラスがあり、あらゆる具体的なタイプのユーザーコントロールを構築することを控えたいと思います。ミックスに追加の制約をスローするために、クラス定義は私のWCFプロキシクラスから来ています。可能であれば、独自のプロキシ/モデル定義を展開することを避けたいですが、私の目標を達成する唯一の方法がそうであれば、そうすることです。

私はもともとPropertyGridを使用しようとしましたが、私の知識はかなり弱く、昨夜の良い例をグーグルグーグルで探すのはあまりありませんでした。

答えて

1

あなたは相互作用の両側に.netを使用しているように聞こえ、両側を制御できます。この場合、プロキシクラスを生成する代わりに、サービスとクライアントの両方が参照する共通のアセンブリにコントラクトを配置し、生成されたプロキシを使用する代わりにコントラクトクラスとインタフェースを直接使用することで、クラスを完全に制御できますあなたが望むどんな属性でも使用する能力を持っています。

+0

私はそれがいくつかの奇妙な理由で可能であることを認識していませんでした。私はまだWebServicesの時代に生きていると思います...私はそれを撃つでしょう。 –

+0

wcfをそうするのが私の好みです。 channelfactory http://msdn.microsoft.com/en-us/library/ms576132.aspxでプロキシインスタンスを簡単に作成できます。そうすれば、契約変更があった場合にプロキシを同期させ続けるためのすべての時間を再生成するステップがありません。 –

+0

すべてのプロパティ記述子とカスタムタイプ記述子を実装するのはたくさんの作業でしたが、それぞれの具体的なタイプごとに別々のコントロールを作成することとほとんど同じではありません。今私はちょうど私のchar []コレクションエディタに\ tを受け入れる方法を理解する必要があります... lol –

0

各タイプのコントロールを作成しないようにするには、各オブジェクトのプロパティに反射を使用し、データを簡単に操作できる文字列に変換する必要があります。 2つの列を持つグリッドコントロール。プロパティ名の左側と値の右側(文字列として)。編集が行われると、値が正しいタイプに変換されます。すべての基本型には、比較的簡単にアクセスできる継承コンバータがあります。

あなたのグリッド/リストビューはプロパティのリストである必要があり、これらのプロパティはクラスインスタンスにマッピングする必要があります。オブジェクトのリストは、アイテム(具体的なオブジェクト)の各プロパティを表します。オブジェクトのリストは、いくつかの項目、項目、プロパティのプロパティ情報、およびプロパティ情報に基づいてグリッドに行うその他のものを覚えておく必要があります。

ReflectionとTypeConverterを使用すると、各プロパティを取得して値を編集できるため、いずれかのクラスを編集するためのコントロール(クラスインスタンスのプロパティのグリッド/リストビュー)を作成できます。

+1

あなたはそこで再構築しているPropertyGridコントロールではありませんか? – LarsTech

+0

おそらく、私は決してPropertyGridコントロールを使用したことはありません。 –

+0

私はすでにProperyGridコントロールを使用しようとしています。私が実行した問題は、オブジェクトがWCFメタデータから生成されていることです。プロパティに属性を追加しても機能しません。 –

関連する問題