在C#WPF属性网格中使用装饰器模式在运行时定义属性网格定义是否有效?

时间:2016-06-23 14:13:32

标签: c# wpf decorator propertygrid xceed

您可以使用装饰器模式在C#WPF MVVM项目中定义属性网格的属性定义吗?所以我想在属性网格中实现一个特定的功能,特别是能够让属性处理其属性网格的更改,并在运行时生成更多属性作为响应。

因此,如果有人从属性网格中的下拉菜单中选择一个特定选项,则根据所选的选项,它会在其下生成不同的属性?会使用装饰器模式来定义属性网格的不同视图的排列效率吗?或者是否有更好的模式或方法来处理这种类型的功能?

1 个答案:

答案 0 :(得分:0)

当您考虑激活其他属性行时,这个想法听起来很不错。处理程序只会用包装原始实例的新PropertyGrid实例实例替换当前AddiotionalSelection1PropGrid实例。

但是,当您想停用其他属性时会发生什么?你想遍历装饰链并删除应该停用的装饰器吗?我想这可能会变得有点难看。为了做到这一点,你必须使decorateé可用于装饰者的外部。这种破坏装饰器模式,因为装饰实例不具有与decoratée相同的界面。

这个解决方案可能是为扩展属性列表的每个装饰器创建一个逆装饰器。反向装饰器将删除所有其他属性,以防它们存在。逆装饰器在代码中非常优雅地解决了这个问题,但是有一些缺点:

  • 它增加了装饰器的数量,因为每个添加特定属性的装饰器必须是一个反转,才能完全删除那些属性
  • 当用户大量激活/停用属性和/或UI具有较长的使用寿命时,这可能会导致很长的装饰链。如果它们真的长,可能会导致性能问题。你应该注意每个装饰器的内存占用量都很小。