我努力防止使用Xamarin Forms使用ReactiveUI雙擊按鈕。假設我們有這樣的命令:使用ReactiveUI阻止雙擊
NextCommand = ReactiveCommand.CreateFromTask(async() => await HostScreen.Router.NavigateAndReset.Execute(new NewViewModel()));
它以正常的Xamarin Forms方式綁定到按鈕。不幸的是,非常快的點擊導致兩個命令調用。
是否可以使用ReactiveUI修復它?
我更新的問題總結一下我試過:
var obs = Observable.FromAsync(async() => await HostScreen.Router.NavigateAndReset.Execute(new CitizensIndexViewModel()))
.Throttle(TimeSpan.FromSeconds(2));
LoginCommand = ReactiveCommand.CreateFromObservable(() => obs);
不幸的是,它並沒有幫助。當你在一個按鈕上快速雙擊時,會執行兩次命令執行。
我也嘗試添加鎖定語句或信號到'execute'方法,但它也失敗了,因爲執行並不是並行完成的。這也是爲什麼使用CanExecute方法不起作用的原因。
潛在的工作是一個醜陋的布爾標誌。這個解決方案唯一的問題是我不得不在重新導航時重置它,這顯然是可行的,但我不認爲它是最好的解決方案。
這聽起來不對。 https://github.com/reactiveui/ReactiveUI/blob/f23538577ea7e567ab372c550adebebe9fdbb7f7/src/ReactiveUI/ReactiveCommand.cs#L566 在此問題中沒有足夠的信息可以回答。通常的方式是什麼?你的實現是什麼樣的。請提供一個repro。 –
@GeoffreyHuntley我更新了我的問題。我希望我的意思更清楚。我對ReactiveUI相當陌生,所以請原諒我的無知:)。我只想學習 – mierzynskim