2012-05-05 11 views
0

私はクラスプロパティ上のアトリビュートで定義されたコントロールを持つダイアログボックスを生成できるクラスを持っています。例:リフレクションを使用してアトリビュートを使用してダイアログ作成を駆動する代わりに

public class MyClass 
{ 
    [DialogControl("Total Amount")] 
    public Int32 Total { get; set; } 
} 

は、私がTotalプロパティのNumericUpDownを持つダイアログボックスを生成します。ダイアログが終了すると、ダイアログの値がプロパティに設定されます。これはうまくいく。

しかし、この属性はクラスを少し複雑にしています。クラス内のプロパティに属性を追加することなく、同様の機能を得るための他の設計や可能性を探求したいと考えています。

このようなシステムをどのように設計して実装しますか?

EDIT:MyClassに類似したクラスが既に設計されており、クライアント側になるとします。クラスからダイアログへの変換を行うコードは内部的なものです。

+0

属性名を取得し、テキストを "Total Amount"とするクラス属性にすることができます。例えば、 '[ClassDialogControls(" Total "、" Total Amount "、" OtherProp "、" Other Text ")] '。あなたは "クリーナー"と考えるかもしれません...とにかく、あなたの実装はかなり素晴らしいですが、実際の必要性はわかりません。 – SimpleVar

+0

実装は、アプリケーションの中で何度も起こるダイアログの設定と表示を削減します。ダイアログ設定のためにこのメタデータを追加するブリッジングクラスのように、別のクラスを設定することを考えていました。 – MarkP

答えて

0

私は流暢なインターフェイスを使用します。これは、私がプロジェクトのコンセプトの証明として考えるワーキングコードです。私はあなたが

var builder = new DialogBuilder<Foo>(); 

     var dlg = builder 
      .CreateTab("Foo") 
       .CreateGroup("Bar") 
        .CreateCtrl("ctrl_Id", "Id"/*[Label]*/, Align.Left) 
        .BindTo(x => x.Id) 
      .Build(); 

このコードは、タブとその上のグループでフォームを作成し、制御ウィッヒがにバインドされ追加されますあなたのclases注釈を付ける必要はありませんこのアプローチの属性のいずれかそれほど好きではありませんFooクラスのプロパティID。 (検証を指定したり、条件を指定して表示したり、他のものを隠すなど) このように、このアプローチは邪魔にならず、ダイアログボックスを動作させるためにモデルの塊に触れる必要はありません。 あなたはPS

http://www.amiralles.com.ar/descargas/fluentdialog.zip

ここからプロジェクト全体をダウンロードすることができますしたい場合:なしドキュメンテーション、ちょうどユニットテストはありません。

+0

単体テストが最良のドキュメントです。私は同意する傾向があります。ありがとう! – MarkP

+0

あなたも大歓迎です、私も同意しがちです;) –

関連する問題