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();
时间: 2024-11-10 00:54:35

WPF:MVVM模式下ViewModel关闭View的相关文章

WPF MVVM模式下动画的实现

原文:WPF MVVM模式下动画的实现 在MVVM模式下,数据的显示都是通过绑定来实现的.当我们在ViewModel里修改数据时,View里面的界面会瞬间变化.但是如果我们希望这个变化有一个动画效果,应该怎么做呢? 可能一开始我们会想到DoubleAnimation.StoryBoard这些东西,但我们很快就会发现,它们只能操作View里面的元素,我们无法在ViewModel里使用它们. 我们在这里使用的方法是:创建一个类似DoubleAnimation的类,它的操作对象就是普通的double类

wpf mvvm模式下的image绑定

view文件 <Image Grid.Column="2" Width="48" Height="64" Stretch="Fill" Source="{Binding CaseCoverImage}" UseLayoutRounding="True" /> model文件 public BitmapImage CaseCoverImage { get { return th

WPF MVVM模式下实现ListView下拉显示更多内容

在手机App中,如果有一个展示信息的列表,通常会展示很少一部分,当用户滑动到列表底部时,再加载更多内容.这样有两个好处,提高程序性能,减少网络流量.这篇博客中,将介绍如何在WPF ListView中实现这个功能. 实现思路:为ListView新增一个附加属性,用来绑定当下拉到底部时触发增加列表内容的功能. XAML: <Window.Resources> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConver

js架构设计模式——MVVM模式下,ViewModel和View,Model有什么区别

MVVM模式下,ViewModel和View,Model有什么区别 Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model. View:也很简单,就是展现出来的用户界面. 基本上,绝大多数软件所做的工作无非就是从数据存储中读出数据,展现到用户界面上,然后从用户界面接收输入,写入到数据存储里面去.所以,对于数据 存储(model)和界面(view)这两层,大家基本没什么异议.但是,如何把model展现到view上,以及如何把数据从view写入到m

浅析WPF中MVVM模式下命令与委托的关系

??各位朋友大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com.最近因为项目上的原因开始接触WPF,或许这样一个在现在来讲显得过时的东西,我猜大家不会有兴趣去了解,可是你不会明白对某些保守的项目来讲,安全性比先进性更为重要,所以当你发现银行这类机构还在使用各种"复古"的软件系统的时候,你应该相信这类东西的确有它们存在的意义.与此同时,你会更加深刻地明白一个道理:技术是否先进性和其流行程度本身并无直接联系.由此我们可以推论出:一项不流行

WPF MVVM 如何在ViewModel中操作View中的控件事件

(在学习Wpf的时候,做一个小例子,想在TextBox改变后,检验合法性,并弹出提示.在找了很多贴后,发现这个小例子,抄袭过来,仅供参考.) 虽然说MVVM模式下不建议在Viewmodel层中操控View层中控件,但是在某些情况下,比如想要得到某个事件的参数,在Viewmodel层中不太方便实现,这时候就可以用下面的方法了. 在XAML中 1.引用组件并设置 xmlns:Interaction="http://schemas.microsoft.com/expression/2010/inter

WPF MVVM模式的一些理解

/*本文转自 http://www.cnblogs.com/sirkevin/archive/2012/11/28/2793471.html */ 使用WPF+Mvvm开发一年多,期间由于对Mvvm模式的理解不足,遇到了很多问题,也绕了很多弯子:网上提供的Mvvm的示例比较简单,实际项目中的需求也各种各样.不过经过几个项目,也有了一些对Mvvm模式的理解: 1. Mvvm是什么,Mvvm是怎么来的?Mvvm模式广泛应用在WPF项目开发中,使用此模式可以把UI和业务逻辑分离开,使UI设计人员和业务

WPF MVVM模式

1. MVVM MVVM的设计模式最早于2005年由微软的WPF和Silverlight架构师John Gossman在他的博客中提到. WPF中采用MVVM的架构可以获得以下好处: 1. 将UI和业务的设计完全分开,View只是ViewModel的消费者 2. 有助于我们区别并哪些是UI操作,哪些是业务操作,而不是将他们混淆 3.层与层之间耦合度降低,这一点非常符合面向对象(OOP)的思想. 2.MVVM 用图来表示,这个是从网上找的图,简单明了,省去了自己画.   3.下面来一步一步写代码吧

MVVM模式下如何使用ReactiveCocoa响应链式编程&lt;一&gt;

前一阵子公司要求项目从新架构,但又只给不到一个月的时间,这显然是不可能的.但从新架构又是在所难免的,和同事商定后决定一部分交互逻辑比较少的界面先使用MVVM架构,然后慢慢修改.下面整理了一下这次重构的遇到的问题,并希望能给大家一些帮助. 1.ReactiveCocoa的使用 要使用MVVM模式编程收下选择一个框架,当然不仅仅是ReactiveCocoa这一个框架,这里就不多说.当然我也没用过别的,如果哪位看官用过可以多多指教.接下来我就按步骤说了: 第一步:导入ReactiveCocoa框架,建