在Caliburn.Micro中停用后,多个屏幕中共享的屏幕消失
在多个父屏幕之间共享在Caliburn.Micro中停用后,多个屏幕中共享的屏幕消失,caliburn.micro,Caliburn.micro,在多个父屏幕之间共享屏幕时,我使用Caliburn.Micro遇到了一个问题。在这个例子中,我在一个shell中有两个选项卡。每个选项卡共享一个SharedViewModel(本质上是一个单例)的实例 每个选项卡的视图都有一个ContentControl绑定到Shared属性,该属性是SharedViewModel: <ContentControl cal:View.Model="{Binding Shared}"/> 以下是事件的顺序: 启动应用程序。查看共享视图 切换到第二
屏幕时,我使用Caliburn.Micro遇到了一个问题。在这个例子中,我在一个shell中有两个选项卡。每个选项卡共享一个SharedViewModel
(本质上是一个单例)的实例
每个选项卡的视图都有一个ContentControl
绑定到Shared
属性,该属性是SharedViewModel
:
<ContentControl cal:View.Model="{Binding Shared}"/>
以下是事件的顺序:
启动应用程序。查看共享视图
切换到第二个选项卡。查看共享视图
切换回第一个选项卡共享视图已消失。
再次切换到第二个选项卡。共享视图就在那里
继续把头发拔出来
您可以在上看到示例应用程序。屏幕
类基于ViewAware
,它在加载视图后缓存并重用视图。由于同一个视觉实例不能多次附加到视觉树,这会导致您观察到的行为
尝试在屏幕中覆盖此选项:
public override object GetView(object context = null)
{
return null;
}
这就像一个符咒,有一个附录。
屏幕
基类没有将GetView
标记为virtual
,因此必须将方法标记为new
。谢谢@KrisMcGinnes实际上,至少从版本2开始,GetView应该在ViewAware中定义为虚拟。请调查一下好的渔获量。我想我使用的是2.0,而不是2.0.1,它将GetView
作为虚拟的。
public override object GetView(object context = null)
{
return null;
}