沙玛琳的棱镜.窗体无法自动连接

本文关键字:连接 窗体 棱镜 | 更新日期: 2023-09-27 18:06:53

我正在试用Prism。表格为我的下一个客户项目。不幸的是,我发现我的样品有一种奇怪的行为。

借口似乎XF或Prism不喜欢我包含一个现有的XAML页面(Brian Lagunas本人也在Evolve会议上提到过)。但是重命名页面也会抛出它,并且ViewModelLocator似乎无法再定位ViewModel。即使我用相同的名称重新创建页面,它也找不到它的ViewModel。手动设置BindingContext工作,但我试图不创建我的依赖于构造函数注入。

在处理现有代码时,当使用NavigationPage作为根时,一个微小的更改导致了NullReference异常。下面是一个工作示例应用程序

https://github.com/hnabbasi/xamarin/tree/master/XFPrism/XFPrism

我正在使用一个NavigationPage和推送一个ContentPage。然后我推另一个ContentPage,然后我通过按钮点击和通信显示一个模态页面。我通过NavigationParameters将参数发送回第二内容页。

要打破它,只需尝试用IPageDialogService交换ISayHello服务。我不知道发生了什么事,把它弄坏了。

提前感谢:)

沙玛琳的棱镜.窗体无法自动连接

INavigationService是一个命名类型,我记得Unity的一个已知限制是命名类型必须在未命名类型之前。

正如Dan S.在评论中提到的。当我调用PageDialogService来显示警报时,MainPage没有设置,因此使用NullReference。

如果你真的需要做这样的事情,你想在做一个操作之前等待一些事情完成,试试Task.Yield()

我将我的场景固定如下,

    // will yield for current operation of page appearing
    await Task.Yield(); 
    // by now, the page has appeared and set, so this should work fine
    SayHiCommand.Execute(this); 

我过去使用过这个解决方法。如果你知道更好的处理方法,请评论。