0
更新されない:、ReactiveCommand:CanExecuteは私がViewModelにのコンストラクタ内ReactiveCommand作成しようとしています
IObservable<bool> canExecute = this
.WhenAnyValue(x => x.InsertableItems, x => x.IsRefreshing,
(insertableItems, isRefreshing) => !isRefreshing && insertableItems > 0);
canExecute.Subscribe(x => this.Logger.LogInformation("Can execute changed: {0}", x));
this.ConvertCmd = ReactiveCommand.CreateAsyncTask(canExecute, ConvertCmdExecute);
ConvertCmdはその後、私のGUIでボタンのCommandプロパティにバインドされているが
<Button Content="Convert" Command="{Binding ConvertCmd, Mode=OneWay}" />
しかし、GUIのボタンがグレーアウトされたままと決して注意することが
いくつかのことを有効になります:
- 私のロガーでは、最新の/最後の値がTrue(期待どおり)である「Can execute execute changed ...」といういくつかの更新を見ています。だから、私のIObservable canExecuteは正しい、期待される値のシーケンスを作成しているようだ。最終的に真で終わるシーケンス。
- ReactiveCommand.CreateAsyncTask(ConvertCmdExecute)を使用してコマンドを作成すると、つまりcanExecuteパラメータを省略すると、ボタンが有効になり、ClickでConvertCmdExecuteを期待どおりに実行します。だから、データバインディング自体のように思えます。
私はここで紛失しています。元のシナリオでボタンが有効にならない理由を知っている人はいますか?
UIスレッド以外のスレッドが 'InsertableItems'または/または' IsRefreshing'を設定しているためです。 – Aron