替代使用属性来驱动对话框创建

时间:2012-05-05 23:20:25

标签: c# winforms reflection

我有一个类可以生成一个对话框,其中包含通过类属性上的属性定义的控件。例如:

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

使用反射,我为Total属性生成一个带有NumericUpDown的对话框。取消对话框后,对话框中的值将设置到属性中。这很有效。

但是,这个属性让我的课程变得混乱了。我想探索其他设计或可能性,以获得类似的功能,而无需向类中的属性添加属性。

您将如何设计和实施此类系统?

编辑:假设类似于MyClass的类已经设计好并且将面向客户端。进行类到对话框转换的代码是内部的。

1 个答案:

答案 0 :(得分:0)

我将使用流畅的界面。这是一段工作代码,我作为项目概念的证明。我不喜欢属性,所以使用这种方法你不应该注释你的clases

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:没有文件,只有单元测试。