【问题标题】:Why does Prism.Forms DialogService not work?为什么 Prism.Forms DialogService 不起作用?
【发布时间】:2019-08-30 22:33:08
【问题描述】:

我更新到 7.2 并尝试使用 DialogService。 按照发行说明中的​​示例,如果视图基于 Grid,则似乎无法向容器 (Unity) 注册。如果我将视图更改为 ContentPage,我可以让它注册到容器中,但是当我运行测试并点击应该通过 ShowDialog 启动对话框的按钮时,我收到以下错误:

Specified cast is not valid.
  at Prism.Services.Dialogs.DialogService.CreateViewFor (System.String name) [0x00000] in d:\a\1\s\Source\Xamarin\Prism.Forms\Services\Dialogs\DialogService.cs:154 
  at Prism.Services.Dialogs.DialogService.ShowDialog (System.String name, Prism.Services.Dialogs.IDialogParameters parameters, System.Action`1[T] callback) [0x00044] in d:\a\1\s\Source\Xamarin\Prism.Forms\Services\Dialogs\DialogService.cs:31

我不确定出了什么问题。我的代码中唯一的区别是我的测试按钮位于标签页的内容页中。

我认为需要用一个有效的例子来更新文档。

感谢您的帮助。

【问题讨论】:

  • 好吧,我想我知道出了什么问题。当我添加我的对话框视图时,我只使用了一个内容页面模板,它在一长串注册列表的末尾添加了一个容器注册。我手动添加了一个注册,我想这会导致一些问题。
  • 您好,如果解决了记得在回答中更新,然后其他人就会知道解决方案。

标签: xamarin.forms prism


【解决方案1】:

对话框必须派生自 View 类型。由于 RegisterDialog 扩展是强类型的,因此它强制执行此操作。如果您规避了注册,或者使用了 RegisterForNavigation,那么问题完全在于您做错了。

您在此处报告的错误是,当为对话框创建视图时,它无法将其转换为类型视图。

请注意,在您的 App.RegisterTypes 中,您将有类似的内容:

containerRegistry.RegisterDialog<DialogA>();

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2019-08-06
    • 2016-07-05
    • 2011-08-06
    • 2013-01-18
    相关资源
    最近更新 更多