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