将 ViewModel 实例保留在 DialogService 上

Keep ViewModel instance on DialogService

Prism 的IDialogService.ShowDialog 方法每次都会创建目标视图模型的新实例。如果可能,我可以重用相同的视图模型实例吗?有什么办法吗?

您可以将对话框视图模型注册为单例到引导程序中的容器,例如为了团结。

containerRegistry.RegisterSingleton<MyDialogViewModel>();

您也可以将自己创建的实例注册为实例。

var myDialogViewModel = new MyDialogViewModel(...);
containerRegistry.RegisterInstance(typeof(MyDialogViewModel), myDialogViewModel);

然后 IDialogService 每次都会解析相同的视图模型实例。您仍然需要注册对话框,因此ViewModelLocator 可以识别视图的视图模型类型。

containerRegistry.RegisterDialog<MyDialogView, MyDialogViewModel>();

或者,您可以像这样注册对话框视图,将 AutoWireViewModel 设置为 True

containerRegistry.RegisterDialog<MyDialogView>();
<UserControl x:Class="MyApp.MyViews.MyDialogView"
             ...
             xmlns:prism="http://prismlibrary.com/"
             prism:ViewModelLocator.AutoWireViewModel="True">