Wpf Prism导航后处理ViewModel

时间:2017-10-26 20:42:31

标签: c# wpf mvvm prism mvvm-light

我正在开发一个使用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导航后有没有办法处理视图?

1 个答案:

答案 0 :(得分:1)

通过对我的usercontrol实施IRegionMemberLifetime接口并添加以下属性

解决了该问题
public bool KeepAlive
{
    get
    {
        return false;
    }
}