我有一个类可以生成一个对话框,其中包含通过类属性上的属性定义的控件。例如:
public class MyClass
{
[DialogControl("Total Amount")]
public Int32 Total { get; set; }
}
使用反射,我为Total
属性生成一个带有NumericUpDown的对话框。取消对话框后,对话框中的值将设置到属性中。这很有效。
但是,这个属性让我的课程变得混乱了。我想探索其他设计或可能性,以获得类似的功能,而无需向类中的属性添加属性。
您将如何设计和实施此类系统?
编辑:假设类似于MyClass
的类已经设计好并且将面向客户端。进行类到对话框转换的代码是内部的。
答案 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:没有文件,只有单元测试。