【问题标题】:Wpf Prism Dispose ViewModel after navigation导航后Wpf Prism Dispose ViewModel
【发布时间】:2018-04-08 09:00:28
【问题描述】:

我正在开发一个使用 Prism 框架的应用程序。我在引导程序中注册了视图模型,如下所示:

ViewModelLocationProvider.Register<LoginControl, LoginViewModel>();
ViewModelLocationProvider.Register<MainWindow, MainWindowViewModel>();
ViewModelLocationProvider.Register<CountryList, CountryViewModel>();

我还为导航注册了棱镜:

builder.RegisterTypeForNavigation<LoginControl>();
builder.RegisterTypeForNavigation<MainWindow>();
builder.RegisterTypeForNavigation<CountryList>();

它工作完美,但我发现每个视图模型的构造函数在第一次导航到 ViewModel 时被调用一次。在提供相同的视图模型对象之后。但我希望在导航之后,viewmodel 也应该处理并且每次都提供新对象。

我想实现一些类似于autofac的:

builder.RegisterType<ModuleLoader>().InstancePerDependency()

但我在ViewModelLocationProvider 中没有找到任何方法来实现这一点。有什么方法可以实现吗?

更新

发现当我从一个视图导航到另一个视图时,该视图也没有被释放。我们移动到相同的视图(区域中的用户控件),然后提供相同的对象,这是 ViewModel 相同实例的真正原因。在 Prism 中导航后有什么方法可以处理视图?

【问题讨论】:

    标签: c# wpf mvvm prism mvvm-light


    【解决方案1】:

    通过在我的用户控件中实现IRegionMemberLifetime 接口并添加以下属性解决了这个问题

    public bool KeepAlive
    {
        get
        {
            return false;
        }
    }
    

    【讨论】:

    • 我宁愿使用 [RegionMemberLifetime(KeepAlive = false)] 而不是在我的视图模型中创建新属性;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多