在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;
    }