我仍然是Rx的新手,并且很难弄清楚如何表达这个(看似)简单的订阅。我正在寻找这样的东西:
以上所有都是可观察的。因此,在交易开始时,我想开始关注更改通知,无论有多少人进来,我都想记住任何收到的通知。当事务结束时,我想调用我的处理程序来更新可视状态。
网上有很多有趣的例子,展示了如何为鼠标拖拽做这件事。我遇到的唯一问题是我不希望得到每一个改变的事件。我想知道在交易结束之前是否有任何遭遇。
任何人都可以帮助我指出正确的方向吗?
更新:我当前的算法看起来像这样:
bool pendingRefresh = false;
Observable
.Merge(
_selectionChanged,
_objectManager
.PropertiesChanged
.Where(objects => objects.Contains(_selectedObject)))
.Subscribe(_ => pendingRefresh = true);
_actionManager
.IsInTransaction.Where(isIn => !isIn)
.Throttle(TimeSpan.FromSeconds(0.15))
.Subscribe(_ =>
{
if (pendingRefresh)
{
pendingRefresh = false;
Refresh();
}
});
工作正常,但我想知道我是否可以通过单一订阅获得。
答案 0 :(得分:3)
看起来你走在正确的轨道上。如果您不关心变更通知的数量,请查看Any运算符:
public static IObservable<bool> Any<TSource>(this IObservable<TSource> source)
这只会触发一次,当第一条消息进入时它将触发为真,如果OnCompleted发生而没有任何消息进来则会触发错误。
希望这有帮助。
杰弗里