Wpf 使用Caliburn.Micro重用视图实例

Wpf 使用Caliburn.Micro重用视图实例,wpf,caliburn.micro,Wpf,Caliburn.micro,我有一个包含子视图的视图,其中包含像这样的ContentControls <ContentControl x:Name="DetailView" /> 这个很好用。当我将ContentControl的内容更改为另一个ViewModel时,它将加载另一个ViewModel和view。但是,当我从之前更改回ViewModel时,它将不会重用视图实例,而是创建一个新实例。注意:我没有指定第一个ViewModel的新实例,但会指定相同的实例 我怎么能说Caliburn.Micro重用以

我有一个包含子视图的视图,其中包含像这样的ContentControls

<ContentControl x:Name="DetailView" />

这个很好用。当我将
ContentControl
的内容更改为另一个ViewModel时,它将加载另一个ViewModel和view。但是,当我从之前更改回ViewModel时,它将不会重用视图实例,而是创建一个新实例。注意:我没有指定第一个ViewModel的新实例,但会指定相同的实例

我怎么能说Caliburn.Micro重用以前的视图实例而不是创建新的视图实例呢?

您是否使用它来创建
视图
视图模型
的实例

只需创建一个
的实例。让我演示如何在IoC容器中创建一个singleton
Unity

container.RegisterType<IViewContentControl, ConentControl>(
                        new ContainerControlledLifetimeManager()); 
container.RegisterType(
新的ContainerControlled LifetimeManager());

其中
containerControlled LifetimeManager()
表示在应用程序的整个生命周期中只有一个实例。

我使用的是Caliburn.Micro框架本身的
SimpleContainer
。我只在容器中设置了ViewModels。由于您的输入,我可以看到视图模型也可以通过
IoC
容器生成。所以我也只需要注册视图:
container.Singleton()-但是如果ViewModel是
PerRequest
,每个ViewModel是否都与视图具有
1:1
关系?@ZoolWay否,如果将视图注册为singleton,并不意味着其视图模型自动注册为singleton。您也应该将
viewModel
注册为singleton。可能我不清楚-我先注册viewModel,所以我已经将viewModel定义为IoC singleton,并且已经做了很长一段时间了。通过IoC设置视图对我来说也是新的一部分;)开放性问题是:如果viewmodel是按请求的,并且视图是单视图,那么每个viewmodel实例(首先转到viewmodel时)会有一个视图,还是所有viewmodel实例都会有一个视图共享?每个viewmodel实例(首先转到viewmodel时)会有一个视图?是的,对于新创建的
ViewModel
,只有一个
View
实例。但是,
Window
DataContext
属性可以一次为一个viewModel设置。是否希望一个视图具有多个ViewModels?