我对 Rx 还是很陌生,很难弄清楚如何表达这个(看似)简单的订阅。我正在寻找这样的东西:
- 开始: InTransaction.Where(inTransaction => inTransaction)
- 如果:ItemChanged 或 On FlagChanged,让 Changed = true
- 结束: InTransaction.Where(inTransaction => !inTransaction)
以上都是可观察的。因此,在交易开始时,我想开始关注更改通知,无论有多少进来,我只想记住已经收到任何通知。当事务结束时,我想调用我的处理程序来更新视觉状态。
网上有很多有趣的例子展示了如何为鼠标拖动执行此操作。我遇到的唯一问题是我不想获得每一个更改的事件。我想知道在交易结束之前是否有任何被击中。
谁能帮我指出正确的轨道?
更新:我当前的算法看起来像这样:
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();
}
});
工作正常,但我想知道我是否可以通过一次订阅来摆脱困境。