ReactiveCommand
には、出力として整数を生成します。サブスクリプションの前にToPropertyを実行
public ReactiveCommand<Unit, int> Calculate { get; }
このコマンドからの最新の結果は、その出力はLatestValue
に格納され、ObservableAsPropertyHelper
private readonly ObservableAsPropertyHelper<int> _latestValue;
public int LatestValue => _latestValue.Value;
...
Update.ToProperty(this, vm => vm.LatestValue, out _latestValue);
Calculate
が実行されるたびに使用して変数に格納されます。私はこのような何かするとき はしかし、私は、問題が発生します。この観察できるから
anotherObservable.SelectMany(_ => Calculate.Execute())
.Select(value => value == LatestValue);
結果がセレクト()ObservableAsPropertyHelper
アップデートLatestValue
前に実行されるため、常にfalseであると思われるが、そのためLatestValue
は時代遅れの値を持っています。
これは、observableが値を生成するときに関数を実行したいので、この関数はCalculate
から最新の値を必要とするため、問題です。私は観測値から新しい値を渡すことはできません、それは変数にある必要があります。
Calculate
を実行してからWhenAnyValue
を使用してLatestValue
の更新を待つことについて考えました。しかし、これは前回の実行によって更新が引き起こされる可能性があり、一般的には悪い設計のように見えるため、エラーが発生しやすくなります。
この問題を解決する最善の方法は何ですか?
最新の値を格納する目的は何ですか?連続して 'Calculate'を複数回実行する場合に最新の値を取得することを保証することですか? –
実際には、Calculateはビューモデルを検証する関数です。この関数は非常にコストがかかり、ビューモデルの有効性はコードの複数の場所でチェックされます。コードベース内のいくつかの関数は非反応的なので、observableを使うことはできませんが、最新の値が必要です。 – Wouter