使用Reactive Extensions来协调和扩展简化Control.Enabled = true / false条件?

时间:2013-05-05 11:19:29

标签: winforms events event-handling system.reactive

是否可能,或者更准确地说,如何使用RX.Net来监听多个(WinForms)控件的数量和不同种类的.TextChanged / .RowsChanged / .SelectionChanged事件以及何时满足一个条件(ControlA) .Text不为空,ControlB.RowsCount> 0等)启用一个DoSomething按钮。

我在问,因为目前我们在每个事件的处理程序中都有一个冗长的if / then语句,并且如果条件发生变化则维护它们,由于代码重复,很容易出错,这就是为什么,如果可能的话,我认为它很高兴能把事件发生在一个地方。

有没有人这样做过?

2 个答案:

答案 0 :(得分:0)

您应该能够使用.FromEventPattern()为每个事件创建observable,然后使用CombineLatest()在当前整体状态上执行逻辑,并确定是否应启用按钮的地方。

答案 1 :(得分:0)

您可以将Observable.FromEventPattern与Join模式结合使用,使用Observable.When,Observable.And和Observable.Then来创建可根据各种条件触发的observable,例如事件组合。例如,请在此处考虑我的答案:Reactive Extensions for .NET (Rx): Take action once all events are completed