间接改变类参数

时间:2015-12-15 13:05:52

标签: c#

我使用反射在TreeListView(ObjectListView)上显示一个类。 TreeListView与ChildrenGetter()委托一起使用,该委托获取要显示的节点(参见here)。

为了显示类(我们将其称为反射类),树的根是类的实例,而ChildrenGetter(object x)使用反射返回反射类的每个子项的实例

例如,对于这个类:

public class Folder
{
    public int BuildNumber { get; set; }
    public int MaxSpeed { get; set; }
}

root将是Folder的一个实例,它将有2个子节点,包含BuildNumber和MaxSpeed的值。

这样可以,但仅用于显示。我希望能够在UI上更改BuildNumber和MaxSpeed的值,以便它们实际上可以更改树根所包含的反射类的实例。

所以有两种方法可以做到这一点:

  1. 保存树节点中每个节点的父(拥有类),并创建一个"地址路径"对于每个节点,然后使用反射查找已更改的节点并实际更改它(在反射的类实例中)
  2. 它们可以包含某种指向反射类实例中参数的指针,而不是包含反射类参数值的树节点。
  3. 解决方案2是否可能?在C#中是否有一些指针可以允许这样的功能?

    您能想到更好的解决方案吗?

    注意:

    • 树可以包含其他类的类,并且深度不受限制。现在,我没有在任何地方使用结构
    • 我无法改变反映的课程。它是自动生成的
    • 首选安全代码,但如果没有其他可用的安全代码

1 个答案:

答案 0 :(得分:1)

如果您能够将一些元数据附加到您创建的控件/树项目,则可以创建Action<T>并将其分配给标记或类似内容。

如果你有它的实例,你可以这样(使用string作为样本数据类型):

Action<string> action = val => instance.X = val;