如何在WPF中从ViewModel处理MessageBox.Show

时间:2013-10-23 03:07:52

标签: c# .net wpf mvvm dispatcher

我正在使用MVVM设计模式编写WPF应用程序。我想知道最好的(读“MVVM投诉”)这样做的方式。另请注意,我的视图模型中的所有代码都不在UI线程上运行。目前,我正在使用App.Current.Dispatcher访问VM中的Dispatcher,然后在其上调用MessageBox.Show()

1 个答案:

答案 0 :(得分:8)

您应该创建以下服务

IMessageBoxService \\ Exposes Show(string Title, String Caption)
IDispatcherService \\ Exposes Dispatch(Action action), Register(Dispatcher)

然后将WPF特定实现创建为

MessageBoxService (or WPFMessageBoxService if you wish)
DispatcherService

将这些注册到应用程序中使用的DI / IoC容器(例如Unity / MEF / Windsor)

对于从属视图模型,通过构造函数传递服务,如

public MainViewModel(IMessageBoxService messageBoxService, IDispatcherService dispatcherService)

现在,您可以使用messageBoxService / dispatcherService通过Dispatcher上的ViewModel调用消息框。

MessageBox example