将 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">
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">