WPF:MVVM模式下ViewModel关闭View
不外乎两种基本方法。
消息通知和参数传递。
一、消息通知
利用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();
WPF:MVVM模式下ViewModel关闭View的更多相关文章
- WPF:MVVM模式下ViewModel调用View
两种基本方法: 消息通知和参数传递 一.消息通知 利用View里的IsEnable属性 原理是这样的: 1.UI中的IsEnabled绑定VM中的属性 2.UI的后台代码中,注册IsEnableCha ...
- wpf mvvm模式下CommandParameter传递多参
原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递多参数,就要稍微处理一下.我暂时还没找到更好的方案,下面介绍的这 ...
- WPF MVVM模式下ComboBox级联效果 选择第一项
MVVM模式下做的省市区的级联效果.通过改变ComboBox执行命令改变市,区. 解决主要问题就是默认选中第一项 1.首先要定义一个属性,继承自INotifyPropertyChanged接口.我这里 ...
- WPF MVVM模式下的无阻塞刷新探讨
很多时候我们需要做一个工作,在一个方法体里面,读取大数据绑定到UI界面,由于长时间的读取,读取独占了线程域,导致界面一直处于假死状态.例如,当应用程序开始读取Web资源时,读取的时效是由网络链路的速度 ...
- MVVM模式中ViewModel和View、Model有什么区别
Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model. View:也很简单,就是展现出来的用户界面. 基本上,绝大多数软件所做的工作无非就是从数据 ...
- wpf mvvm模式下 在ViewModel关闭view
本文只是博主用来记录笔记,误喷 使用到到了MVVM中消息通知功能 第一步:在需要关闭窗体中注册消息 public UserView() { this.DataContext = new UserVie ...
- WPF MVVM模式下路由事件
一,路由事件下三种路由策略: 1 冒泡:由事件源向上传递一直到根元素.2直接:只有事件源才有机会响应事件.3隧道:从元素树的根部调用事件处理程序并依次向下深入直到事件源.一般情况下,WPF提供的输入事 ...
- wpf mvvm模式下的image绑定
view文件 <Image Grid.Column="2" Width="48" Height="64" Stretch=" ...
- WPF MVVM模式下实现ListView下拉显示更多内容
在手机App中,如果有一个展示信息的列表,通常会展示很少一部分,当用户滑动到列表底部时,再加载更多内容.这样有两个好处,提高程序性能,减少网络流量.这篇博客中,将介绍如何在WPF ListView中实 ...
随机推荐
- Rhythmk 学习 Hibernate 08 - Hibernate annotation 关联关系注解
1.一对一 (One to One) 共三种情况: 1.1 主键共享 1.2 外键共享 1.3 中间表关联 1.1 code: @Entity public class arti ...
- js 和 java互调
Java调JS JDK1.8 中Nashorn 比JavaScript性能更好 public static void main(String[] args) { long s = System.cur ...
- HashMap,Hash优化与高效散列
OverView Hash table based implementation of the Map interface. This implementation provides all of t ...
- readlink 获取当前进程对应proc/self/exe
[readlink 获取当前进程对应proc/self/exe] shell中 readlink /proc/self/exe READLINK(2)NAME readlink - re ...
- vbs执行系统命令
首先说明一下,我的所有代码都是vbscript,jscript我没有研究过,不过我想也差不多. 关于最基础的语法比如变量的申明,分支,循环,函数的调用,等等这些我就不讲了,不懂得自己看一下. 1.我们 ...
- python socket编程入门(编写server实例)-乾颐堂
python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参 ...
- git查看远程仓库地址
git remote -v
- 玩转Sketch,不容错过的5大实用插件推荐
在之前的文章中,笔者为大家介绍了Sketch 的入门教程.实用技巧和资源集锦,相信大家对Sketch已经有了初步的了解和认识.除了基础的矢量设计功能以外,插件更是让Sketch保持强大的独门秘籍.Sk ...
- 解决win7和2008连接windows 2003远程桌面很卡的问题
解决win7和2008连接windows 2003远程桌面很卡的问题 来源:http://www.hack1990.com/ 作者:佚名 时间:2013-04-12 TAG: 我要投稿 原因在于从vi ...
- TabHost tab项单击事件
TabHost 选项发生变化时会触发OnTabChangedListener事件,但是如果当前已经选中第一项,再次单击该项时,OnTabChangedListener不会触发该事件,所以再次单击选中t ...