Angenommen, ich bilde einen Bild-Editor mit Rx.Net. Der Benutzer kann die Leinwand mit der Maus bearbeiten. Die angewendete Manipulation hängt vom aktuell ausgewählten Werkzeug ab. Zum Beispiel könnte es ein Zeichenwerkzeug und ein Löschwerkzeug geben. Es kann immer nur ein Werkzeug ausgewählt werden.Wie erhalte ich den letzten bekannten Wert eines IObservable?
Ich habe drei Streams; eine für Mausereignisse; eine für Befehle, die durch Klicken mit der Maus ausgegeben werden; und eine andere für die Werkzeugauswahl:
IObservable<ITool> toolSelection;
IObservalbe<MouseState> mouse;
IObservable<ICommand> commands;
commands
Der Strom hängt von den beiden anderen: Befehle werden ausgegeben, wenn der Benutzer mit der Maus klickt, und der Befehl erzeugt wird, hängt von der zuletzt ausgewählten Werkzeug. Beachten Sie, dass ein Befehl nicht ausgegeben werden sollte, wenn der Benutzer Werkzeug ändert, nur wenn sie die Maus klicken.
Nun, ich könnte die zuletzt gewählte Werkzeug in einer Variablen wie folgt speichern:
var selectedTool = defaultTool;
toolSelection.Subscribe(x => selectedTool = x);
I selectedTool
können die commands
Stream bauen:
var commands = mouse.Select(x => selectedTool.CreateCommand(x));
Allerdings bedeutet dies nicht scheinen, wie die "reaktive" Art, Dinge zu tun. Kann ich die gleiche Logik mithilfe von Stream-Kompositionen erreichen?
Ich habe CombineLatest
betrachtet, aber es verursacht unerwünschte Ereignisse, wenn der Benutzer das Tool wechselt. Ich möchte nur Befehle ausgeben, wenn der Benutzer klickt.