Wpf 使用Caliburn.Micro重用视图实例
我有一个包含子视图的视图,其中包含像这样的ContentControlsWpf 使用Caliburn.Micro重用视图实例,wpf,caliburn.micro,Wpf,Caliburn.micro,我有一个包含子视图的视图,其中包含像这样的ContentControls <ContentControl x:Name="DetailView" /> 这个很好用。当我将ContentControl的内容更改为另一个ViewModel时,它将加载另一个ViewModel和view。但是,当我从之前更改回ViewModel时,它将不会重用视图实例,而是创建一个新实例。注意:我没有指定第一个ViewModel的新实例,但会指定相同的实例 我怎么能说Caliburn.Micro重用以
<ContentControl x:Name="DetailView" />
这个很好用。当我将ContentControl
的内容更改为另一个ViewModel时,它将加载另一个ViewModel和view。但是,当我从之前更改回ViewModel时,它将不会重用视图实例,而是创建一个新实例。注意:我没有指定第一个ViewModel的新实例,但会指定相同的实例
我怎么能说Caliburn.Micro重用以前的视图实例而不是创建新的视图实例呢?您是否使用它来创建视图
和视图模型
的实例
只需创建一个
的实例。让我演示如何在IoC容器中创建一个singletonUnity
:
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?