原理是这样的:

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();
在DataGrid 等控件中, 有很多这种带闪电符号的触发事件. 如果用传统的事件驱动, 则直接在后台中建立 一个private PropertyChanged(Sender s, EventAgars Args) 即可. 但是如果需要绑定到ViewModel的话? 应该怎么做? 带闪电符号的触发事件 实现viewModel绑定前端触发事件的写法: <DataGrid x:Name="myDataGrid" AlternationCou MVVM Pattern : Model\View\ViewModel View:视图、UI界面 ViewModelViewModel是对Model的封装,通过一系列属性暴露Model的状态,提供给View进行显示 Model:数据模型 使用MVVM模式可以将代码逻辑和UI进行分离,因此开发团队可以关注创建健壮的ViewModel类,而设计团队可以关注设计界面友好的View。要融合两个团队输出只需要在View的xaml上进行正确的绑定即可。 二、演示程序 下面通过一个Demo演示WPF中如何使用MVVM模式:使用WPF中的data template、commands、data binding、resource结合MVVM模式,创建一个简单、可测试、健壮的框架。 演示程序结构图如下: 1、演示程序 Demo界面如图所示: 工作区用于显示视图 命令区分两部 自己记录一下怕自己以后都忘记了。 言归正传,控制页面的关闭,我首先想到的就是在每一个页面里面添加一个关闭事件,但是这样太过于繁琐了。然后就各种网上找资料,找了很久也没有找到合适的方法。 为了不过于繁琐的去写,在思考着个问题的时候,突然灵光乍现,想到了一个取巧的方法。 首先把所有要用到的页面根据名字都注入到容器里面去。 申明一个容器 static ContainerBuilder _Builder;//申明容器 把页面注入到容器里面去 分别是 窗口、窗口类型、窗口名称 _Builder.R.. 参考自:https://blog.csdn.net/zang141588761/article/details/79230319 1.使用MVVM时,有多个窗体,但只关闭当前窗体,使用Application.Current.Shutdown(-1); Process.GetCurrentProcess().Kill();就会将所有窗体全部关闭。肯定不行。 2.用附加属性控制窗体的打开与关闭 public static class DialogCloser public sta 原文:http://blog.csdn.net/leftfist/article/details/32349731 矫枉过正,从一个极端走向另一个极端。MVVM模式View只负责呈现,虽然也有后台代码,但基本上就是摆设,VM接管了一切的逻辑处理。 那么,现在,大能的VM已经完成了所有的事情,这个窗口V如何才能自动关闭呢? 据我目前少得可怜的WPF知识可知,有两种方案: 方案一、利用Vie... 背景:例如我在点击窗口关闭按钮时候要执行的函数有一个,名为Window_Closing那么我需要在界面控件初始化后添加到Closing中public SerialOption() InitializeComponent(); this.Closing += Window_Closing; public partial class App : Application protected override void OnStartup(StartupEventArgs e) this.StartupUri = new Uri("MainWindow.xaml", UriKind.Relative);