使用属性驱动对话框创建的替代方法

本文关键字:方法 创建 对话框 属性 | 更新日期: 2023-09-27 18:33:15

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

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

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

但是,该属性使我的类有点混乱。我想探索其他设计或可能性以获得类似的功能,而无需向类中的属性添加属性。

您将如何设计和实现这样的系统?

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

使用属性驱动对话框创建的替代方法

我将使用流畅的界面。这是一段工作代码,我将其作为项目的概念证明。我也不喜欢属性,所以使用这种方法,您不必注释您的类别

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