Предположим, что я создаю редактор изображений, используя Rx.Net. Пользователь может манипулировать холстом с помощью мыши. Применяемая манипуляция зависит от выбранного в данный момент инструмента. Например, может быть инструмент «draw» и инструмент «erase». За один раз можно выбрать только один инструмент.Как получить последнее известное значение IObservable?
У меня есть три потока; один для событий мыши; один для команд, выпущенных щелчком мыши; а другой для выбора инструмента:
IObservable<ITool> toolSelection;
IObservalbe<MouseState> mouse;
IObservable<ICommand> commands;
commands
поток зависит от двух других: команды выдается, когда пользователь нажимает кнопку мыши, и команда сгенерирована зависит от последнего выбранного инструмента. Обратите внимание, что команда должна указывать не, когда пользователь меняет инструмент, только когда они нажимают на мышь.
Теперь, я мог бы хранить последний выбранный инструмент в переменной, как это:
var selectedTool = defaultTool;
toolSelection.Subscribe(x => selectedTool = x);
я могу использовать selectedTool
построить commands
поток:
var commands = mouse.Select(x => selectedTool.CreateCommand(x));
Однако, это не кажется как «реактивный» способ делать что-то. Могу ли я достичь той же логики, используя потоковые композиции?
Я просмотрел CombineLatest
, но это вызывает появление нежелательных событий, когда пользователь переключает инструмент. Я просто хочу, чтобы команды выходили, когда пользователь нажимает.