使用Caliburn Micro 2和Windows Phone 8.1导航到视图模型(NavigateToViewModel)

4

我正在尝试弄清楚如何在Windows Phone 8.1应用程序中成功地使用Caliburn Micro从一个页面导航到另一个页面。

我的第一页按照我的App类中的指定加载得很好:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    this.DisplayRootViewFor<HomeViewModel>();
}

这样就可以顺利启动HomeView。在该视图中,我有一个按钮,调用以下方法:

public void GoToPage2()
{
    this.navigationService.NavigateToViewModel<Page2ViewModel>();
}

当按钮被按下并调用Page2ViewModel的构造函数时,将调用此方法。但页面从未显示出来,我无法弄清原因。我觉得我缺少一个核心概念,但我找不到任何关于这应该如何工作的例子。

感谢任何帮助。


你读过这篇文章吗?http://wp.qmatteoq.com/using-caliburn-micro-with-universal-windows-app-navigation/ - Igor Ralic
我有一个视图模型,它继承自Screen并被实例化,OnActivate也被调用了。虽然这很有信息量,但它并没有解决我的问题。问题在于该视图从未出现在屏幕上。 - Brian Vallelunga
你有Page2View吗? - mvermef
是的,我有一个Page2View。请看下面我的回答。 - Brian Vallelunga
1个回答

5
这个解决方案很奇怪,可能是Caliburn Micro中的一个bug。在OnLaunched方法中,我曾经使用过以下代码:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    this.DisplayRootViewFor<HomeViewModel>();
}

这段代码可以启动主界面,但是后续的导航操作却无效。经过查看一个示例应用程序的比较,我修改了代码如下:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    this.DisplayRootView<HomeView>();
}

这也显示主页视图,但现在后续导航可以正常工作!我不确定为什么会出现这种情况,但至少我有了一个答案。


2
实际上这不是一个 bug,而是视图优先与视图模型优先开发的结果。它们在设计上略有不同,如果您使用的是直接的 wp8.1 非 Silverlight 变体。 - mvermef
@mvermef: 这肯定是一个bug。bug不仅仅指编码问题,设计模糊或者意图不明确也算作是bug。 - Andrey Agibalov
如果您真的想就此问题发表意见,请访问https://github.com/Caliburn-Micro/Caliburn.Micro/issues/71。文档需要更新,涉及视图优先和视图模型优先的设计方法,这代表了观点上的差异而非错误。 - mvermef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接