我有一个GUI,它根据滑块值向Web服务器发出命令。其中一些滑块在Web服务器上“耦合”,因此更改其中一个滑块也可能会更改另一个滑块。耦合由Web服务器完成,返回根据发出的命令设置的值列表。
因此,我可以根据此响应轻松设置相应的滑块,但问题是这样做会导致触发ChangeListener,然后再次向Web服务器发出命令。理想情况下,“耦合”应该表现良好并避免无限循环,但这是一个潜在的问题,并且发送所有这些额外事件似乎是不必要的。
我能想到的两个解决方案是:
对我来说这些似乎都不是理想的解决方案,但其中一个比另一个“更好”?或者我有没有考虑第三种解决方案?
答案 0 :(得分:3)
向侦听器添加enabled
标志并在手动设置值
我不会添加和删除侦听器,因为它只会触发更多侦听器!
答案 1 :(得分:3)
一位作者称此问题为fibrillation。除了@Pyrolistical建议的标记方法之外,此discussion建议使用共享模型。
答案 2 :(得分:0)
.Net WPF中使用的标准模型是仅在属性值发生变化时触发事件!在您的情况下,它是setValue()
方法。
答案 3 :(得分:0)
经过一段时间的努力,陷入各种布尔值的困扰,我发现解决方案是简单地为hasFocus
添加一个检查并做出相应的响应。
如果某个字段没有焦点,那么它将允许对其自身进行更新,但不会触发对其他任何字段的更新。
如果一个字段DID具有焦点,那么它将触发对其他字段的更改。
这样,只有焦点字段可以触发任何更改,并且没有无限循环。现在,该代码易于阅读且简单,并且逻辑易于遵循和更新。