我正在开发一个使用了 Prism Framework 的应用程序。我在 Bootstrap 中注册了 View 模型,如下所示:
ViewModelLocationProvider.Register<LoginControl, LoginViewModel>();
ViewModelLocationProvider.Register<MainWindow, MainWindowViewModel>();
ViewModelLocationProvider.Register<CountryList, CountryViewModel>();
我还为 Navigation 注册了 prism 为:
builder.RegisterTypeForNavigation<LoginControl>();
builder.RegisterTypeForNavigation<MainWindow>();
builder.RegisterTypeForNavigation<CountryList>();
它工作完美,但我发现在第一次导航到 ViewModel 时,每个 View 模型的构造函数都被调用一次。在提供相同的 View 模型对象之后。但我希望在导航之后,viewmodel 也应该处理并且每次都提供新对象。
我想实现一些类似于 autofac 的东西:
builder.RegisterType<ModuleLoader>().InstancePerDependency()
但是我没有在 ViewModelLocationProvider
中找到任何方法来实现这一点。有什么办法可以实现吗?
更新
发现当我从一个 View 导航到另一个 View 时,该 View 也没有被释放。我们移动到相同的 View (区域中的用户控件),然后提供相同的对象,这是 ViewModel 的相同实例的真正原因。有什么办法可以在 Prism 中处理导航后的 View 吗?
最佳答案
通过为我的用户控件实现 IRegionMemberLifetime
接口(interface)并添加以下属性解决了这个问题
public bool KeepAlive
{
get
{
return false;
}
}
关于c# - Wpf Prism 在导航后处理 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46963455/