【发布时间】:2015-02-18 05:25:26
【问题描述】:
此问题特定于 Windows Phone 8.1 (WinRT);它也可能适用于 Windows 8.1。我正在使用 Caliburn.Micro 2.0.1
在我的 ViewModel 的 OnActivate 中,我检查一个项目是否是数据库,如果不是,我想导航回上一页。
最简单的解决方案是在OnActivate 方法中调用GoBack(这适用于Windows Phone 8.0):
INavigationService _navigationService;
protected override void OnActivate()
{
_item = GetItemFromDB();
if(_item == null)
{
_navigationService.GoBack()
}
}
导航到我调用的视图模型:
_navigationService.NavigateToViewModel<MyViewModel>(_param);
但它不起作用,它忽略了GoBack 调用并停留在我不想查看的页面上。
单步执行代码时,您可以看到GoBack 代码在NavigateToViewModel 方法内部被调用;我希望这就是它不起作用的原因(可能与排队问题有关?)。
我有一个非常“hacky” 的解决方案,其中涉及一个计时器(有效),但我真的很鄙视它,因为它容易出现线程问题并且有可能在@987654329 期间被调用@ 调用(如果需要很长时间才能完成),这将再次不起作用:
protected override void OnActivate()
{
_item = GetItemFromDB();
if(_item == null)
{
DispatcherTimer navigateBackTimer = new DispatcherTimer();
navigateBackTimer.Interval = TimeSpan.FromMilliseconds(300);
navigateBackTimer.Tick += GoBackAfterNavigation;
navigateBackTimer.Start();
}
}
public void GoBackAfterNavigation(object sender, object e)
{
_navigationService.GoBack();
(sender as DispatcherTimer).Stop();
}
有没有更好的导航方式?为什么GoBack 在OnActivate 中不起作用?有没有办法让它在OnActivate 中工作?
【问题讨论】:
标签: c# windows-runtime windows-phone-8.1 caliburn.micro caliburn