0

クラス プロパティの属性を介して定義されたコントロールを含むダイアログ ボックスを生成できるクラスがあります。例:

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

リフレクションを使用して、プロパティの NumericUpDown を含むダイアログ ボックスを生成しTotalます。ダイアログが閉じられた後、ダイアログからの値がプロパティに設定されます。これはうまくいきます。

しかし、属性は私のクラスを少し混乱させます。クラスのプロパティに属性を追加することなく、同様の機能を実現する他の設計や可能性を探りたいと考えています。

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

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

4

1 に答える 1

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();

このコードは、タブとグループを含むフォームを作成し、Foo クラスのプロパティ Id にバインドされたコントロールを追加します。(検証を指定したり、ある条件で表示したり、別の条件で非表示にしたりすることもできます) ご覧のとおり、このアプローチは邪魔にならず、ダイアログを機能させるためにモデルクラスに触れる必要はありません。必要に応じて、ここからプロジェクト全体をダウンロードできます

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

PS: ドキュメントはなく、単体テストのみです。

于 2012-05-08T13:25:47.300 に答える