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中实 ...
随机推荐
- 清除MAC 可清除空间
一.首先:查到了官方解释 https://support.apple.com/zh-cn/HT202867官方说 在 macOS Sierra 中,当您打开优化 Mac 储存空间时,会显示“可清除”内 ...
- Visio2013 64位下载安装以及破解激活教程
特别说明:以下教程如果未能破解激活,请在断网条件下安装破解!!!! 安装: Visio2013 professional版下载地址:https://pan.baidu.com/s/1gzwcGTevV ...
- docker 基本使用和安装提速
https://www.cnblogs.com/Erik_Xu/p/6662936.html#redis >yum install -y docker 道客提速 先安装curl >yum ...
- How To Install Spring IDE In Eclipse
Spring IDE is a very useful graphical user interface tool adding support for Spring Framework. In th ...
- Symfony 从路由认识它
经过上一篇文章之后,我们呢,可以访问这个默认的页面,你也会看到一堆高级的debug工具.好了,这次我们开始更多地了解这个symfony2.0. 首先我们要明白一点,Symfony2 的配置是一个着实很 ...
- CLR的八大特性
[CLR的八大特性] Code that you develop with a language compiler that targets the runtime is called managed ...
- solr 的edismax与dismax比较与分析
edismax支持boost函数与score相乘作为,而dismax只能使用bf作用效果是相加,所以在处理多个维度排序时,score其实也应该是其中一个维度 ,用相加的方式处理调整麻烦. 而disma ...
- 一些jquery常用方法
1.jquery实现平滑滚动到指定锚点 $(document).ready(function() { $("a.topLink").click(function() { $(&qu ...
- ArcEngine调用GP里的Merge工具传参问题
Merge工具inputs参数形式与Python中不同: string startLayerPath= cpj.TempWs.PathName + @"\" + datasetNa ...
- WebService之SOAP
SOAP(Simple Object Access Protocol),它是一种标准消息传递协议,通常是Web Service的事实标准.SOAP是以XML为基础,SOAP消息格式是由XML Sche ...