Я все еще довольно новичок в Rx и мне трудно понять, как выразить эту (на первый взгляд) простую подписку.Я ищу что-то вроде этого:
- Начало: InTransaction.Where (inTransaction => inTransaction)
- Если: ItemChanged или On FlagChanged, пусть Changed = true
- End: 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();
}
});
Работает нормально, но мне было интересно, смогу ли я выбраться с одной подпиской.