【问题标题】:Writing a properties aggregator编写属性聚合器
【发布时间】:2015-10-08 08:19:26
【问题描述】:

背景

花了很多时间研究之后,我还没有找到任何方法可以将多个对象分配给PropertyGrid(扩展 WPF 工具包)。我的下一个想法是创建我自己的聚合器类,它接收选定的对象并将它们的 common 属性暴露给外部世界。然后我会将这个类(的一个实例)分配给PropertyGrid。用户在PropertyGrid 中所做的任何更改都将由聚合器类传递给选定的对象。

问题

框架中是否有任何内容(尤其是Reflection)可以帮助我完成这项任务?我域中的所有对象都继承自一个共同的祖先并添加它们自己的新属性(或覆盖祖先版本)。类层次结构有多个层次。

更新

对于和我遇到同样情况的其他人,我终于能够解决PropertyGrid 问题。解决方法见my other post

【问题讨论】:

  • 有了你想要的,你需要创建聚合器类 dynamically 。所以很难轻松完成(我们需要使用System.Reflection.Emit)。事实上,如果我们生成类定义代码并使用System.CodeDom.CompilerMicrosoft.CSharp 可能会更容易。我想知道你为什么想做那样的事情?如果您想在PropertyGrid 中显示所有常见属性,我想您可以将其SelectedObjects(而不仅仅是SelectedObject)设置为您的对象数组。
  • 好吧,我刚刚意识到你的意思是扩展工具包中的PropertyGrid,看起来它不支持多对象选择。
  • @Hopeless:你的身份证比你的回答更让我害怕!
  • 我猜你的问题的解决方案甚至会让你比我的身份证更害怕。

标签: c# .net wpf reflection


【解决方案1】:

希望我能正确解释你想要的。

其中一个想法是使用T4ToolBox通过脚本生成预编译类(这也是模板文件中的C#代码)。

  • 定义要聚合到 xml 中的对象。
  • 然后可以使用反射循环遍历对象中的所有公共方法/属性(基于xml),找出常用方法的集合
  • 生成一个接口和(如果需要)相应的具体类
  • 之后的一项手动工作是通过实现新生成的接口来更改您的原始对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    相关资源
    最近更新 更多