Поскольку вы хотите, чтобы они выполнялись последовательно, ReactiveCommand.CreateCombined
не совсем подходит. Однако вы можете создать что-то похожее на CombinedReactiveCommand для работы в вашей ситуации.
Реактивные команды можно выполнить вручную, вызвав ReactiveCommand<TParam,TResult>.Execute
, который возвращает IObservable<TResult>
, который возвращает одно значение. Следовательно, очень простая реализация может просто связать ее с другими вызовами выполнения с помощью SelectMany
:
ReactiveCommand.CreateFromObservable(() =>
CommandA.Execute()
.SelectMany(_ => CommandB.Execute())
.SelectMany(_ => CommandC.Execute()));
Если все ваши команды имеют одинаковый тип, это можно сделать более общим:
var commands = new[] { CommandA, CommandB, CommandC };
ReactiveCommand.CreateFromObservable(() =>
commands.Aggregate(
Observable.Return(Unit.Default),
(acc, cur) => acc.SelectMany(_ => cur.Execute())));
Однако это не учитывает другие вещи, которые обрабатывает CombinedReactiveCommand, такие как CanExecute
и ThrownExceptions
. Если вам нужно справиться с этим, то вы можете рассмотреть возможность создания собственной CombinedReactiveCommand.