Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向用户提供配置对象树的最简单方法是什么?_C#_Winforms_User Interface - Fatal编程技术网

C# 向用户提供配置对象树的最简单方法是什么?

C# 向用户提供配置对象树的最简单方法是什么?,c#,winforms,user-interface,C#,Winforms,User Interface,因此,我有一个对象树,它看起来类似于: AbstractA string PropA int PropB AbstractC PropC AbstractD PropD AbstractB string PropA string PropB AbstractC : AbstractB string PropC AbstractD : AbstractB int PropC ConcreteA1 : AbstractA

因此,我有一个对象树,它看起来类似于:

AbstractA
    string PropA
    int PropB
    AbstractC PropC
    AbstractD PropD

AbstractB
    string PropA
    string PropB

AbstractC : AbstractB
    string PropC

AbstractD : AbstractB
    int PropC

ConcreteA1 : AbstractA
    int PropE

ConcreteC1 : AbstractC
    bool PropD

ConcreteC2 : AbscractC
    decimal PropD

ConcreteD1 : AbstractD
    string PropD
ConcreteD2 : AbstractD
    long PropD
我面临的问题是找到一种全面的方法,为用户提供配置对象树的能力。有多个具体类扩展了我的摘要,我不想为每个具体类型构建用户控件。为了在混合中抛出一个附加约束,类定义来自我的WCF代理类。如果可能的话,我希望避免滚动我自己的代理/模型定义,但是如果实现我的目标的唯一方法是这样做,那就这样吧


我最初尝试使用PropertyGrid,但我对它的了解非常薄弱,昨晚我在谷歌上搜索任何好的示例时运气都不太好。

为了避免为每种类型构建控件,需要对每个对象的属性使用反射,并将数据转换为易于操作的字符串。具有两列的网格控件,左侧为属性名称,右侧为属性值(作为字符串)。进行编辑时,将值转换为正确的类型。每个基类型都有一个相对容易访问的继承转换器

grid/listview需要是属性列表,这些属性需要映射到类实例。对象列表将表示项目(具体对象)的每个属性。对象列表将需要记住一些东西,项目、属性的属性信息和值,以及您希望网格根据属性信息执行的任何其他操作


使用Reflection和TypeConverter,您可以获取每个属性并编辑它们的值,从而创建一个控件(类实例属性的网格/列表视图)来编辑任何类。

为了避免为每个类型生成控件,您需要对每个对象的属性使用反射,并将数据转换为易于操作的字符串。具有两列的网格控件,左侧为属性名称,右侧为属性值(作为字符串)。进行编辑时,将值转换为正确的类型。每个基类型都有一个相对容易访问的继承转换器

grid/listview需要是属性列表,这些属性需要映射到类实例。对象列表将表示项目(具体对象)的每个属性。对象列表将需要记住一些东西,项目、属性的属性信息和值,以及您希望网格根据属性信息执行的任何其他操作


使用Reflection和TypeConverter,您可以获取每个属性并编辑它们的值,从而创建一个控件(类实例的属性的网格/列表视图)来编辑您的任何类。

听起来您在交互的双方都使用.net,并且可以控制双方。如果是这种情况,则不生成代理类,您可以将契约放入服务和客户端都引用的公共程序集中,直接使用契约类和接口,而不是使用生成的代理,从而可以完全控制所使用的类,并能够使用您想要的任何属性。

听起来像是在使用.net对双方都有互动和控制。如果是这种情况,则不生成代理类,您可以将契约放入服务和客户端都引用的公共程序集中,直接使用契约类和接口,而不是使用生成的代理,从而完全控制所使用的类,并能够使用您想要的任何属性。

这不是PropertyGrid控件吗你正在那里重建?可能是的,我从未使用过PropertyGrid控件。我已经在尝试使用PropertyGrid控件,遇到的问题是我的对象是从WCF元数据生成的。向属性添加属性不起作用。这不是您正在重建的PropertyGrid控件吗?可能是,我从未使用过PropertyGrid控件。我正在尝试使用PropertyGrid控件,遇到的问题是我的对象是从WCF元数据生成的。向属性添加属性不起作用。出于某种奇怪的原因,我没有意识到这是可能的。我想我仍然生活在网络服务时代。。。我会试一试的。我更喜欢这样做wcf。使用channelfactory轻松创建代理实例。这样,如果合同发生更改,您就不需要一直重新生成代理以保持代理同步。实现所有属性描述符和自定义类型描述符需要做大量工作,但还不如为每个具体类型创建单独的控件。现在我只需要弄清楚如何让我的char[]集合编辑器接受\t。。。洛莉没有意识到这是可能的,因为某种奇怪的原因。我想我仍然生活在网络服务时代。。。我会试一试的。我更喜欢这样做wcf。使用channelfactory轻松创建代理实例。这样,如果合同发生更改,您就不需要一直重新生成代理以保持代理同步。实现所有属性描述符和自定义类型描述符需要做大量工作,但还不如为每个具体类型创建单独的控件。现在我只需要弄清楚如何让我的char[]集合编辑器接受\t。。。英雄联盟