【问题标题】:NavigateToViewModel with Caliburn Micro 2 and Windows Phone 8.1NavigateToViewModel 与 Caliburn Micro 2 和 Windows Phone 8.1
【发布时间】:2014-09-07 17:59:33
【问题描述】:

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

我的第一个页面加载得很好,正如我的 App 类中指定的那样:

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

这会毫无问题地启动 HomeView。在该视图中,我有一个调用以下方法的按钮:

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

当按钮被按下时调用该方法,同时调用 Page2ViewModel 的构造函数。该页面从未显示,我不知道为什么。我觉得我错过了一个核心概念,但我找不到任何应该如何工作的例子。

感谢您的帮助。

【问题讨论】:

  • 你读过这篇文章吗? wp.qmatteoq.com/…
  • 我有,虽然它提供了丰富的信息,但它并不能解决我的问题。我有一个从 Screen 继承的视图模型,它被实例化并调用 OnActivate。只是视图永远不会出现在屏幕上。
  • 你有 Page2View 吗?
  • 是的,我有一个 Page2View。请参阅下面的答案。

标签: caliburn.micro windows-phone-8.1


【解决方案1】:

解决方案很奇怪,可能是 Caliburn Micro 中的一个错误。在我曾经拥有的 OnLaunched 方法中:

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

这有效并启动了主页视图,但随后的导航从未奏效。在与我找到的示例应用程序进行比较后,我将代码更改为:

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

这也显示主页视图,但现在后续导航工作!我不确定为什么会这样,但至少我有一个答案。

【讨论】:

  • 其实不是bug,是view-first vs viewmodel first开发的结果。它们的设计略有不同,如果您使用直接 wp8.1 非 Silverlight 变体。
  • @mvermef:这绝对是一个错误。错误不仅仅与编码有关:误导性设计或模糊意图也是错误。
  • github.com/Caliburn-Micro/Caliburn.Micro/issues/71 如果你真的想就这个问题说点什么,那就去吧。文档确实需要更新与这种与视图优先与视图模型优先相关的设计方法,它代表没有错误,但意见不同。
猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 2013-01-10
  • 2016-01-04
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多