C# Caliburn.Micro返回在激活时调用WinRT不工作
此问题特定于Windows Phone 8.1(WinRT);它也可能适用于Windows 8.1。我正在使用Caliburn.Micro 2.0.1 在我的ViewModel的C# Caliburn.Micro返回在激活时调用WinRT不工作,c#,windows-runtime,windows-phone-8.1,caliburn.micro,caliburn,C#,Windows Runtime,Windows Phone 8.1,Caliburn.micro,Caliburn,此问题特定于Windows Phone 8.1(WinRT);它也可能适用于Windows 8.1。我正在使用Caliburn.Micro 2.0.1 在我的ViewModel的激活中我检查一个项目是否是数据库,如果不是,我想导航回上一页。 最简单的解决方案是在OnActivate方法中调用GoBack(这在Windows Phone 8.0中有效): 要导航到我调用的视图模型,请执行以下操作: _navigationService.NavigateToViewModel<MyViewMo
激活中
我检查一个项目是否是数据库,如果不是,我想导航回上一页。
最简单的解决方案是在OnActivate
方法中调用GoBack
(这在Windows Phone 8.0中有效):
要导航到我调用的视图模型,请执行以下操作:
_navigationService.NavigateToViewModel<MyViewModel>(_param);
有没有更好的方法返回?为什么GoBack
不能在OnActivate
中工作?有没有办法让它在激活状态下工作?您可以使用
Execute.OnUIThreadAsync(() => /* navigationCode */);
而不是在当前堆栈处理完成后立即对操作排队的计时器 它起作用了!谢谢你能解释一下它为什么起作用吗。是异步线程还是UI线程?显然,当您当前在WP8.1中导航并尝试在那里导航时,WP8.1中存在问题。这似乎是caliburn.micro中的一个bug。代码使用Dispatcher将导航调用置于当前执行代码的后面。
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();
}
Execute.OnUIThreadAsync(() => /* navigationCode */);