Rx.Net を使用して画像エディターを構築しているとします。ユーザーは、マウスを使用してキャンバスを操作できます。適用される操作は、現在選択されているツールによって異なります。たとえば、「描く」ツールと「消す」ツールがあるかもしれません。一度に選択できるツールは 1 つだけです。
3 つのストリームがあります。1 つはマウス イベント用です。1 つはマウスをクリックして発行されたコマンド用です。ツール選択用の別のもの:
IObservable<ITool> toolSelection;
IObservalbe<MouseState> mouse;
IObservable<ICommand> commands;
ストリームは他の 2 つに依存します。commands
ユーザーがマウスをクリックするとコマンドが発行され、生成されるコマンドは最後に選択されたツールに依存します。コマンドは、ユーザーがツールを変更したときに発行されるべきではなく、マウスをクリックしたときにのみ発行されるべきであることに注意してください。
これで、最後に選択したツールを次のような変数に格納できます。
var selectedTool = defaultTool;
toolSelection.Subscribe(x => selectedTool = x);
ストリームselectedTool
を構築するために使用できます。commands
var commands = mouse.Select(x => selectedTool.CreateCommand(x));
ただし、これは「リアクティブ」な方法とは思えません。ストリーム構成を使用してこれと同じロジックを実現できますか?
私は見ましCombineLatest
たが、ユーザーがツールを切り替えると、不要なイベントが生成されます。ユーザーがクリックしたときにのみコマンドを発行したい。