我一直在使用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