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



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

因此,如果有人从属性网格中的下拉列表中选择一个特定的选项,基于选择的选项,它将在其下面生成不同的属性?是否使用装饰器图案来定义属性网格有效的不同视图的排列?还是有更好的模式或方法来处理此类功能?

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

但是,当您要停用其他属性时会发生什么?您想穿越装饰链并卸下应该停用的装饰器吗?我猜这可能会变得有些丑陋。为了做到这一点,您将必须使装饰物可用于装饰器的外部。这种打破了装饰的图案,因为装饰的实例不会与装饰的界面相同。

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

  • 它使装饰师的数量增加一倍
  • 当用户大量激活/停用属性和/或UI具有较长寿命时,这可能会导致很长的装饰链。如果它们变成确实很长,可能会导致性能问题。您应该注意每个装饰器的内存范围很少。

最新更新