我的WinRT应用程序中使用Caliburn.MicroCaliburn.Micro重新绑定ContentControl中的导航GoBack的
这里是我的主VM:
public class MainViewModel : Conductor<Screen>
{
protected override void OnActivate()
{
if (ActiveItem == null)
{
ActivateItem(
ViewModelLocator.LocateForViewType(typeof(NewsFeedView)) as Screen);
}
base.OnActivate();
}
}
这里我用的导体,因为我想要加载不同的控件ContentControl,但现在我只有这个代码。这里是主视图我的内容控制:
<ContentControl x:Name="ActiveItem" Grid.Column="1" Grid.Row="1" />
当我运行的应用程序都做工精细,MainViewModel.Activate
被调用和ActiveItem
设置为NewsFeedViewModel
和ContentControl
负荷NewsFeedView
。
问题:
当我使用NavigationService.NavigateToViewModel
方法NewsFeedView
控制到其他视图导航,然后在视图中使用NavigationService.GoBack
,我就要回MainView
在那一刻,当MainViewModel.Activate
被调用ActiveItem
不null
,但是ContentControl.Content
是null
。我已经尝试使用View.Model
附加属性ContentControl
但没有运气,如何使它重新绑定?
编辑:在卡利 最后我是安装记录仪,看看会发生什么,我发现了一个错误 - 当的MainView navigationg回来后加载此事件存在的:
Attaching ***.Views.MainView to ***.ViewModels.MainViewModel.
ViewModel bound on ActiveItem.
Using cached view for ***.ViewModels.NewsFeedViewModel.
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Exception: Unspecified error
at Windows.UI.Xaml.Controls.ContentControl.put_Content(Object value)
... some winRT stack
at Caliburn.Micro.View.SetContentPropertyCore(...
尽管它不是那么信息我已经使用InteliTrace获取更多信息并得到以下消息:“元素已经是另一个元素的子元素”。我想NewsFeedView存储在某个地方,当时间到了ContentControl这个异常抛出。 如何解决这个问题?
您是否检查过MainViewModel对象是否仍然是以前的相同实例? “元素已经是另一个元素的子元素”听起来像是在导航到一个新的MainViewModel实例,但旧元素仍然挂在NewsFeedViewModel上。你能分享你的引导程序配置吗? – T045T
请分享您的引导程序。这将告诉你有什么可能性。在.net 4.0/wpf场景中解决了这样的问题。 –
@MareInfinitus在WinRT应用程序中没有引导程序,MainViewModel在Caliburn IoC容器中注册为Singleton – Alexander