我正在使用反射在TreeListView( ObjectListView)上显示一个类.
TreeListView与ChildrenGetter()委托一起使用,该委托获取要显示的节点(参见 here).
为了显示类(我们称之为反射类),树的根是类的实例,而ChildrenGetter(对象x)使用反射来返回反射类的每个子节点的实例.
例如,对于这个类:
public class Folder
{
public int BuildNumber { get; set; }
public int MaxSpeed { get; set; }
}
根将是Folder的一个实例,它将有2个子节点,包含BuildNumber和MaxSpeed的值.
这样可以,但仅用于显示.我希望能够在UI上更改BuildNumber和MaxSpeed的值,以便它们实际上可以更改树根所包含的反射类的实例.
所以有两种方法可以做到这一点:
>保存树节点中每个节点的父(拥有类),并为每个节点创建“地址路径”,然后使用反射查找已更改的节点并实际更改它(在反射的类实例中)
>而不是包含反射类参数值的树的节点,它们可以保存某种指向反射类实例中的参数的指针.
解决方案2甚至可能吗?在C#中是否有一些指针可以允许这样的功能?
你能想到更好的解决方案吗?
笔记:
>树可以包含其他类的类,深度不受限制.现在,我没有在任何地方使用结构
>我无法改变反映的课程.它是自动生成的
>首选安全代码,但如果没有其他可用的安全代码,则可以使用
最佳答案 如果您能够将一些元数据附加到您创建的控件/树项,则可以创建一个Action< T>并将其分配给标签或类似的东西.
如果你有它的实例,你可以这样(使用字符串作为样本数据类型):
Action<string> action = val => instance.X = val;