Xamarin 下 Prism 框架 IDialogService 实例获取与实现问题
解决方案
1. 修正对话框注册逻辑
你当前的注册代码仅关联了对话框视图,没有绑定对应的IDialogAware实现类,首先需要调整RegisterTypes方法,将视图和弹窗ViewModel做绑定:
protected override void RegisterTypes(IContainerRegistry containerRegistry) { // 其余原有注册逻辑保留 // 显式关联对话框视图和对应的ViewModel containerRegistry.RegisterDialog<DialogWindow, DialogWindowViewModel>("DialogWindow"); }
你不需要手动给DialogWindow设置DataContext,Prism会在调用弹窗时自动完成绑定。
2. 无参构造下获取IDialogService实例
Prism提供了全局容器定位器ContainerLocator,可以在任何位置直接获取已经注册的服务实例,不需要通过构造函数注入,调整你调用弹窗的ViewModel代码即可:
public class 你要调用弹窗的ViewModel类名 : BindableBase { // 懒加载获取IDialogService,避免容器未初始化时报错 private IDialogService _dialogService => Prism.Ioc.ContainerLocator.Container.Resolve<IDialogService>(); public void ShowAlert(string message, string title) { var parameters = new DialogParameters { { "title", title }, { "message", message } }; _dialogService.ShowDialog("DialogWindow", parameters); } }
注意事项
- 确保你的应用入口
App类继承自Prism提供的PrismApplication基类,否则容器不会完成初始化,ContainerLocator无法获取到服务实例 - 不要在应用启动的极早期(比如App构造函数执行阶段)调用
ContainerLocator,此时容器还未完成注册流程
内容的提问来源于stack exchange,提问作者Morek Povýšil
相关产品推荐
相关产品推荐

