这更多是一个设计问题.
我正在构建一个以各种方式显示业务对象的工具(例如,树节点,列表视图项,组合框,文本字段等).每当用户更改其中任何一个时,都会引发一个事件,表明该业务对象已更改或它所属的集合已更改.由于此业务对象或其可能所属的集合可能显示在多个位置,因此需要更新这些UI元素中的每一个以反映此更改.是否存在一种优雅的解决方案,可以在发生更改时正确更新每种类型的UI元素?
我对如何做到这一点有一些想法,但是我想看看是否有人遇到过这个问题并对他们的解决方案感到满意.这是C#WinForm,但是解决方案可以使用任何语言.
我目前对该问题的想法和可能的解决方案:
当业务对象成为TreeNodeCollection / ListViewITemCollection / ComboBoxItemCollection的一部分并在集合上调用Clear()时,如果要清理事件绑定(即,businessObject.Changed-= ObjectChanged),它将变得更加复杂.
对于“服务”,每个对象及其ui元素都可以向其注册,可以在一个位置监听业务对象的事件,并且在引发事件时更新每个UI元素,该怎么办?当所有UI元素都取消注册后,该对象事件的订阅将被删除.
该解决方案的问题在于,每个控件都必须负责在每次创建时注册UI组件和对象-这可能会很混乱.
你的意见?
解决方法:
您可能想尝试观察者模式. http://en.wikipedia.org/wiki/Observer_pattern