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