处理GUI组件中的循环依赖关系

时间:2012-03-26 13:20:25

标签: oop design-patterns user-interface event-handling

我遇到了一个设计问题,我确信设计模式存在,我想知道这种模式并更深入地了解攻击它的最佳实践。

我有一个用于输入时间间隔的交互式界面。此时间间隔限制了天数(d),小时(h),分钟(m)和秒(s):

d< = c(给出c)

h:m:s< = 5:30:00

enter image description here

在上面的界面中,您可以手动更改旋钮(那些圆形仪表)以获得每个参数的值(有4个旋钮,3个同心和1个独立)。此外,您可以自己编辑文本框,旋钮应该反映您的更改。当然,当您旋转旋钮时,旋转期间值会发生变化,而不是在移动稳定后。这意味着一系列事件发射和许多角落案件要处理。例如,假设h:m:s为4:38:00,用户增加小时数。而不是简单的5:38:00,除了增加天数,它应该是0:08:00,如果天已经是最大值,则应该是5:30:00。

目前发生的事情是所有逻辑都写在文本框的TextChanged事件中,而旋钮'ValueChanged事件只会更改相应文本框中的文本,从而触发{{1}事件。所以一般的问题是,如何处理这样的场景 - 许多对象相互改变并以循环方式相互依赖?请注意,当您旋转旋钮时,文本框可以拒绝更改,从而在旋转时将前一个值重新分配给旋钮的指针。

1 个答案:

答案 0 :(得分:0)

我认为MVVM可以很好地适用于您的方案。你有:

  • 一个包含天,小时,分钟和秒的模型,以及处理任何更改的业务逻辑,并根据需要将其反映在其他模型上(在.NET中,您可以使用Dependency Properties
  • 两个视图:文本框和知识
  • 两个视图模型,每个视图一个,可以处理视图中的事件并将它们传递给模型,以及处理模型上的更改并将它们反映到视图中

此方法隔离了两个视图,并允许您在一个位置(模型或控制器,如果要添加MVC pattern)维护值周围的逻辑。 viewmodels还封装了您在UI上处理事件的方式。