问题阐述:使用MVVMLight导航发现导航后VM里面的数据并未进行重置,需要界面跳转后,历史VM也进行销毁重置,并释放

解决办法:

方法一:在当前界面进行Unloaded进行VM注销并进行重新注入代码如下

    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

<i:Interaction.Triggers>
<i:EventTrigger EventName="Unloaded">
<i:InvokeCommandAction Command="{Binding UnloadedCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>

        private RelayCommand _UnloadedCommand;
public RelayCommand UnloadedCommand =>
_UnloadedCommand ?? (_UnloadedCommand =
new RelayCommand(ExecuteUnloadedCommand)); void ExecuteUnloadedCommand()
{
SimpleIoc.Default.Unregister<MainWindowViewModel>();
SimpleIoc.Default.Register<MainWindowViewModel>();
}

方法二:对当前的VM获取方式进行做文章

处理思想:当界面在进行获取当前VM的时候创建新的VM就可以了

处理逻辑:封装一个方法,获取当前已经注册的VM然后进行封装转化创建出新的VM,创建过程中并将目标已有多个参数的构造参数进行二次转化封装

        /// <summary>
/// 创建并转化新的VM不再使用原有已经注册的构造函数
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
private T CreateVM<T>()
{
var newClass = SimpleIoc.Default.GetInstance<T>();
Type type = newClass.GetType();
ConstructorInfo[] constructors = type.GetConstructors();
var Parameters = constructors[0].GetParameters();
object[] args = new object[Parameters.Length];
for (int i = 0; i < Parameters.Length; i++)
{
var data = SimpleIoc.Default.GetAllInstances(Parameters[i].ParameterType).FirstOrDefault();
args[i] = data;
}
var vm = constructors[0].Invoke(args);
return (T)vm;
}

使用方法:原有的VM调用的方式为

现在替换为

替换完成后其他的正常使用

注意:使用的第二种方式的话,SimpleIoc.Default.GetInstance方法设置其他界面的VM将失效,选择使用,推荐第二种方式,这样做到了完全解耦,界面跳转VM进行销毁,新页面产生,新的VM也将进行产生

解决MVVMLight导航VM不重置问题的更多相关文章

  1. iOS解决隐藏导航栏后,打开照片选择器后导航栏不显示的问题以及更换导航栏背景色

    问题描述: 遇到一种情况,在一个控制器上(隐藏了导航栏),打开照片选择器 UIImagePickerController后,照片选择器头部一片空白,且上滑相册时,信息会有错乱效果. 原因分析: 通过查 ...

  2. ios --xib自定义,解决在导航栏不透明的情况下,自定义xib view高度被压缩64的问题

    在使用xib自定义view的时候,个人习惯性的直接使用xib中的约束,所以自然而然的要打开Autolayout.以前在使用的时候没有发现什么问题,最近项目中使用的时候突然发现在导航栏透明的情况下,出现 ...

  3. iOS正确解决隐藏导航栏后push和pop或dismiss和present闪黑问题

    情景: 一级页面不显示导航栏 ,二级页面显示导航栏. 方法一 适用于push/pop: 一级页面中 - (void)viewWillAppear:(BOOL)animated { [super vie ...

  4. 解决联想笔记本 安装VM虚拟机后每次启动都会导致电脑蓝屏问题

    现象描述: pc为联想笔记本 系统是微软家庭中文版,每次启动VM虚拟机都会出现蓝屏现象,出现错误代码system_service_exception 原因及解决方法: 对于Windows10家庭版  ...

  5. 通用方法解决dedecms导航调用二级、三级栏目菜单

    博客之前做网站的时候经常会遇到二级菜单.三级菜单.了解dede的人都知道从5.5版本开始都有二级菜单的调用方法了,网上也有不少的教程文章.不过这个调用需要修改dede源码的二级菜单样式.个人感觉不是很 ...

  6. 完美解决Bootstrap4 导航栏 fixed-top 后,锚点定位时遮挡问题

    利用锚点改变事件\(onhashchange\),使用jQuery的\(scrollTop\)向前滚回导航栏的高度(比如我的100个像素) HTML: <body onhashchange=&q ...

  7. 解决高版本vm打开虚拟机报错

    问题: 打开虚拟机的文件目录,找到.vmx 文件 用记事本打开重命名后的“.vmx.txt”文件 找到行:policy.vm.mvmtid = "52 10 08 ed ff 34 ed d ...

  8. 小程序或者vue,解决菜单导航做做成轮播的样子

    案例: 其中最重要的思路就是如何让第二次或第三次以及后面的轮播有数据: 做法大致跟轮播图做法一样,只不过我们需要进行书写样式,代码如下: <!-- 做一个轮播图navbar demo --> ...

  9. 【转载】重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor ...

  10. 重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor

    一般这个错误是由密码错误引起,解决的办法自然就是重置密码. 假设我们使用的是root账户. 1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下: #vim /etc/my.cnf(注:wi ...

随机推荐

  1. DirectX 使用 Vortice 从零开始控制台创建 Direct2D1 窗口修改颜色

    本文将告诉大家如何使用 Vortice 底层库从零开始,从一个控制台项目,开始搭建一个最简单的使用 Direct2D1 的 DirectX 应用.本文属于入门级博客,期望本文能让大家了解 Vortic ...

  2. C#-8 数组

    一 关于数组 数组是由一个变量名称表示的一组同类型的数据元素.数组中的元素通过变量名和方括号索引来访问. int[] intArray = new int[] { 1, 2, 3 }; //声明了一个 ...

  3. HDU1114 Piggy-Bank (完全背包)

    完全背包模板,和01背包相比不用倒推,因为一种可以选多个. 这道题求最小,dp数组初始化为无穷即可. 1 #include<iostream> 2 #include<cstring& ...

  4. GMOJ3284 [GDOI2013] 重构 题解

    Description 给你一个有向图,要求重新建出一张点数相同有向图,使得点的联通关系和原图一致且边数最小. Solution 显然对于图上的一个强连通分量跑个缩点然后把每个强连通分量都变成一个环即 ...

  5. 极客的浪漫「GitHub 热点速览 v.22.41」

    极客的浪漫,是怀旧复古的开源操作系统 SerenityOS 献上的情书:也是实用派用 AI 作画工具 novelai-bot 生成二次元女友.LxgwWenKai 用仿宋 / 楷体中文字体书写而成的那 ...

  6. 我用canvas带你看一场流星雨

    前言 最近总是梦见一些小时候的故事,印象最深刻的就是夏天坐在屋顶上,看着满天的繁星,一颗,两颗,三颗...不由自主地开始了数星星的过程.不经意间,一颗流星划过夜间,虽然只是转瞬即逝,但它似乎比夜空中的 ...

  7. 多态特征,instanceof关键字和abstract类

    多态 对象有多种状态.作用:提高程序的可扩展性. 一个对象具备多种状态的能力,这个程序是可扩展的. 前提: 必须有层级关系 继承 实现 继承:子类和父类的关系,一个父类可以有多个子类,说明父类的引用有 ...

  8. web前端一览&jQuery

    web前端一览 html:裸体 css:好看的衣服            //通常基于bootstrap魔改 JavaScript:动起来           //通常基于JQuery魔改 jQuer ...

  9. POC、EXP、SRC概念厘清

    「POC」 POC可以看成是一段验证的代码,就像是一个证据,能够证明漏洞的真实性,能证明漏洞的存在即可.     https://zhuanlan.zhihu.com/p/26832890 「EXP」 ...

  10. OCI runtime create failed: container_linux.go:349: starting container process caused "exec: "bash": executable file not found in $PATH": unknown

    docker save docker save centos:self -o centos.tar 导出镜像到文件 用于持久化镜像,导出的tar包需要用 docker load -i imagedat ...