我正在开发一个使用Prism Framework的应用程序。我在bootstrapper中注册了viewmodels,如下所示:
ViewModelLocationProvider.Register<LoginControl, LoginViewModel>();
ViewModelLocationProvider.Register<MainWindow, MainWindowViewModel>();
ViewModelLocationProvider.Register<CountryList, CountryViewModel>();
我还为导航注册prism:
builder.RegisterTypeForNavigation<LoginControl>();
builder.RegisterTypeForNavigation<MainWindow>();
builder.RegisterTypeForNavigation<CountryList>();
它的工作完美但我发现每次viewmodel的构造函数在第一次导航到ViewModel时被调用一次。之后,提供了相同的viewmodel对象。但我希望在导航之后,viewmodel也应该进行处理,并且每次都会提供新对象。
我想实现一些类似于autofac:
builder.RegisterType<ModuleLoader>().InstancePerDependency()
但我没有找到ViewModelLocationProvider
中的任何方法来实现这一点。有没有办法实现这个目标?
更新
发现当我从一个视图导航到另一个视图时,视图也没有被处理掉。我们移动到相同的View(区域中的Usercontrol),然后提供相同的对象,这是ViewModel的同一实例的真正原因。在Prism导航后有没有办法处理视图?
答案 0 :(得分:1)
通过对我的usercontrol实施IRegionMemberLifetime
接口并添加以下属性
public bool KeepAlive
{
get
{
return false;
}
}