我一直在使用Rx和更具體ReactiveUI在項目中一段時間,自己也得到了進入的情況下,我想我需要一些建議的MessageBox。ReactiveUI MessageBus與結果
問題是,執行一個命令(單擊一個按鈕)時,我想顯示一個消息框,其中一個用戶將回答是或否。根據答案,然後我想再做一些東東。因爲我在單元測試中使用MVVM,所以我希望MessageBox是可測試的;即由其他代碼替換。這實質上就是我所擁有的。
在我的視圖模型:
this.ExternalObservable = this.SomeOperationCommand
.SelectMany(_ => this.UserWantsToContinueWithOperation())
.Where(x => x)
.Select(_ => this.SomeData)
.Where(x => x != null);
private IObservable<bool> UserWantsToContinueWithOperation() {
var subject = new Subject<bool>();
var box = new GuiMsgBox("Continue?",
result => {
subject.OnNext(result == System.Windows.MessageBoxResult.Yes);
});
MessageBus.Current.SendMessage(box);
return subject;
}
而且GuiMsgBox
基本上是圍繞System.Windows.MessageBox
類我聽使用UI中的MessageBus
,在我測試的包裝。
這一切都運行應用程序時,但在單元測試中,因爲公共汽車,然後使用即時調度工作正常,這顯然不工作方式相同。
我覺得有一些設計上的毛刺在這裏,所以對實際問題的任何輸入;顯示一個消息框,返回一個可以測試的結果,將不勝感激!
好主意,我會嘗試'TestScheduler'這個特殊的問題。對於從對話框中獲得結果的方式,您還有什麼想法?使用ReactiveUI時你怎麼做?我想可以歸結爲「MessageBus」被推遲而不是立即,這是例如。 MVVMLight,不是嗎? – lbergnehr