不外乎两种基本方法。

消息通知和参数传递。

一、消息通知

利用View里的IsEnable属性

原理是这样的:

1、UI中的IsEnabled绑定VM中的属性

2、UI的后台代码中,注册IsEnableChange事件,在这个事件里,检测到传过来的值满足某个条件,即可触发Close()命令

如此,VM控制自己那个属性就能达到关闭V的目的了。

二、参数传递。

根据参数传递的不同。分为传递函数和传递View对象。

1传递函数

该方法:需要三步。

1、重写ViewModel的构造函数

public ProduceCloud_ViewModel(Action close){this.close = close;           }

2、View在新建ViewModel对象时,将View对象的Close方法传递给ViewModel。

public ProduceDsm_View(){InitializeComponent();produceCloudViewModel = new ProduceCloud_ViewModel(this.Close);this.DataContext = produceCloudViewModel;}

3 当执行完某个操作需要关闭View时,调用该函数委托即可。

 private void Act_OnClick(object obj){//其他操作this.close.Invoke();}

2传递View对象

这个就简单了。

1重写ViewModel的构造函数

class MyViewModel{/// <summary>/// 添加Window属性 /// </summary> private Window window { get; set; }  /// <summary> /// 构造函数,接收window作为参数 /// </summary> public MyViewModel(object window) { this.window = (Window)window; } }

3新建ViewModel实例的时候,传入View对象。

public MainWindow(){InitializeComponent();this.DataContext = new MyViewModel(this);}

3需要的时候,就调用window的Close方法。

this.window.Close();

转载于:https://www.cnblogs.com/xinyf/p/6294863.html

WPF:MVVM模式下ViewModel关闭View相关推荐

  1. wpf mvvm模式下CommandParameter传递多参

    wpf mvvm模式下CommandParameter传递多参 原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递 ...

  2. C# WPF MVVM模式下在主窗体显示子窗体并获取结果

    01 - 前言 在winform中打开一个新的子窗体很简单,直接实例化窗体并show一下就可以: Form2 f2 = new Form2();f2.Show(); 或者 Form2 f2 = new ...

  3. WPF MVVM模式下的无阻塞刷新

    MVVM模式下的无阻塞刷新的两种方法: //传统模式下的无刷新调用(主线程开新线程,新线程又调用主线程来更新UI) //第1步先在线程内部计算出需要绑定的数据 //第2步然后再使用Invoke/Beg ...

  4. C# WPF MVVM模式Prism框架下事件发布与订阅

    01 - 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事 ...

  5. C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅

    01 - 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Caliburn提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间 ...

  6. C# WPF MVVM模式Prism框架从零搭建(经典)

    01 - 前言 目前最新的PRISM的版本是8.1.97,本节以6.3.0.0 讲解,可以在Github上获取PRISM的源码. Prism Github地址:https://github.com/P ...

  7. WPF随笔(十四)--如何在MVVM模式下关闭窗口

    离上一篇WPF随笔有多久,再度编码WPF项目就有多久.机缘巧合又接下了一个开发WPF桌面程序的任务,又有机会详细研究之前一直忽略的细节. 今天就来谈谈如何在MVVM模式下关闭窗口. 什么?关闭窗口还要 ...

  8. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

  9. MVVM模式下实现拖拽

    MVVM模式下实现拖拽 原文:MVVM模式下实现拖拽 在文章开始之前先看一看效果图 我们可以拖拽一个"游戏"给ListBox,并且ListBox也能接受拖拽过来的数据, 但是我们不 ...

  10. WPF MVVM模式 发送DataGird表格的数据到另一个页面显示

    WPF MVVM模式 发送DataGird表格的数据到另一个页面显示 这里我们是使用Messenger消息机制把这个页面的表格行数据发送到另一个页面显示,效果如下图: 首先在这个表格页面的ViewMo ...

最新文章

  1. 清华学生计划表上热搜,大写的服!
  2. html css3d效果,html,css的3D变形
  3. java生成pdf_Java实现PDF文件生成并且打印pdf文件 demo
  4. 运行时异常与一般异常有何异同_Java修行第015天,异常机制和常用类
  5. Stacked Hourglass Networks 人体姿态检测
  6. 移动端海洋实时仿真技术研究与实现
  7. Netty RPC Demo 实现
  8. Microsoft Agent技术在Delphi中的应用
  9. 将城市按照拼音首字母进行分类
  10. DW制作小三角型教程
  11. tidb源码编译安装,从入门到差点放弃
  12. JN5169 NXP ZigBee PRO 无线网络应用所需的常见操作(一)
  13. WEB应用log4j1.x升级到log4j2.17.1
  14. 安装ecshop php,如何安装ECSHOP?
  15. 从零开始学习Prometheus监控报警系统
  16. 计算机网络准入技术,计算机网络终端准入控制技术课件.pdf
  17. MobilenetV2学习笔记 --- MobileNetV2: Inverted Residuals and Linear Bottlenecks
  18. SCI常用词语及技巧 - 易智编译EaseEditing
  19. 机器人项目:智能寻迹小车
  20. IDEA中执行scala程序报错Error:scalac: Error: scala/Function1 java.lang.NoClassDefoundError:Scala/Function1

热门文章

  1. 已为此响应调用getwriter()_远程过程调用(RPC)
  2. pythontab_PythonTab 中文网简介
  3. cad填充图案乱理石_「AutoCAD之填充」CAD图案填充的6个要点以及3个墙裂的建议...
  4. 深入理解for循环(执行顺序)
  5. Spring Bean生命周期-prepareRefresh(二)
  6. Java分布式服务框架Dubbo初探(待实践)
  7. Bzoj2882 工艺
  8. Chap 06 HTML使用表格
  9. HTML5 3D翻书效果(双面效应)
  10. 如何使新站得到高权重技巧