C# WPF MVVM 更符合模式理念的关闭View Window(窗口)方法
2021-02-19 08:16
阅读:603
因为很简单,博客就不多写了,下载项目看下代码相信你就能理解。
既然要前后台分离,就不应该在ViewModel中直接操作View Window,我们可以用数据绑定的方法去操作它,给窗口绑定一个状态属性,为1时关闭窗口。
在开发过程中我们不可能每个窗口后台都手动加上这个属性,所以新建一个类,继承Window,在这个类添加一个依赖属性,用于判断窗口是否应该关闭,然后所有窗口只要使用这个类即可。
(普通属性不能绑定,需要依赖属性才行)
TmdWindow.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace tmdmvvm { public class TmdWindow : Window { #region 依赖属性 #region 窗口状态 ////// 窗口状态(可绑定属性)为1时关闭 /// public int WState { get { return (int)GetValue(WStateProperty); } set { SetValue(WStateProperty, value); } } public static readonly DependencyProperty WStateProperty = DependencyProperty.Register("WState", typeof(int), typeof(TmdWindow), new PropertyMetadata(defaultValue: 0, propertyChangedCallback: WStatePropertyChangedCallback, coerceValueCallback: null) ); private static void WStatePropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { TmdWindow c = (d as TmdWindow); if (c != null) { if (e.NewValue != null) { int v = Convert.ToInt32(e.NewValue); switch (v) { case 1: //关闭窗口 c.Close(); break; } } } } #endregion #endregion } }
在window上使用和绑定状态属性
local:TmdWindow x:Class="tmdmvvm.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:tmdmvvm"
mc:Ignorable="d"
Title="MainWindow"
Height="350" Width="525"
WState="{Binding WState}"
>
TextBlock Text="这个窗口将在3秒后关闭">TextBlock>
local:TmdWindow>
这里赶时间省略了很多代码,窗口关闭直接用一个线程延迟3秒去设置状态属性了,viewmodel的代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace tmdmvvm.ViewModel { public class TmdViewModel : UINotifyPropertyChanged { private int WState_; public int WState { get { return WState_; } set { WState_ = value; OnPropertyChanged(); } } public TmdViewModel() { Thread t = new Thread(() => { //睡眠3秒 Thread.Sleep(3000); //关闭窗口 WState = 1; }); t.Start(); } } }
搞定~
项目下载:
点我下载
文章来自:搜素材网的编程语言模块,转载请注明文章出处。
文章标题:C# WPF MVVM 更符合模式理念的关闭View Window(窗口)方法
文章链接:http://soscw.com/index.php/essay/57432.html
文章标题:C# WPF MVVM 更符合模式理念的关闭View Window(窗口)方法
文章链接:http://soscw.com/index.php/essay/57432.html
评论
亲,登录后才可以留言!