c# - Wpf Prism 在导航后处理 ViewModel

标签 c# wpf mvvm prism mvvm-light

我正在开发一个使用了 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/

相关文章:

c# - 应用程序 session 的用户设置

c# - 如何衡量 C# 中哈希表的性能?

c# - 将 ComboBox SelectedItem 绑定(bind)到 DataContext 值

c# - 如何将二维数组中的一行值复制到一维数组中?

c# - 如何在 c# WPF 应用程序中取消上传

wpf - PasswordBox 绑定(bind)问题 MVVM

android - 如何实现嵌套的实时数据?

c# - 具有依赖属性的 ContentPresenter 和 Datatemplates

c# - Developer 和 MSbuild 命令提示符之间有什么区别

c# - 使用 linq 组合两个对象的更好方法?