WPF MVVM模式

1. MVVM

MVVM的设计模式最早于2005年由微软的WPF和Silverlight架构师John Gossman在他的博客中提到。

WPF中采用MVVM的架构可以获得以下好处:

1. 将UI和业务的设计完全分开,View只是ViewModel的消费者

2. 有助于我们区别并哪些是UI操作,哪些是业务操作,而不是将他们混淆

3.层与层之间耦合度降低,这一点非常符合面向对象(OOP)的思想。

2.MVVM 用图来表示,这个是从网上找的图,简单明了,省去了自己画。

 

3.下面来一步一步写代码吧!

3.1 在项目根目录创建Model文件夹,并新增一个实体类,PersonModel,实现INotifyPropertyChanged通知接口。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7
 8 namespace MVVMDemo.Model
 9 {
10     public class Person : INotifyPropertyChanged
11     {
12         public event PropertyChangedEventHandler PropertyChanged;
13
14         private string name = "吃饭了";
15         public string Name
16         {
17             get { return name; }
18             set { name = value; OnPropertyChanged("Name"); }
19         }
20
21         private void OnPropertyChanged(string propertyName)
22         {
23             if (PropertyChanged == null) return;
24             PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
25         }
26
27         public void Show(object o)
28         {
29             this.Name += ",吃饭了";
30
31         }
32     }
33 }

PersonModel

3.2 在项目根目录创建ViewModel文件夹,并新增一个PersonViewModel

 1 using MVVMDemo.Commands;
 2 using MVVMDemo.Model;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8
 9 namespace MVVMDemo.ViewModel
10 {
11    public class PersonViewModel
12     {
13         public PersonCommand PersonCommand { get; set; }
14         public Person PersonModel { get; set; }
15
16         public PersonViewModel()
17         {
18             this.PersonModel = new Person();
19             this.PersonCommand = new PersonCommand();
20             this.PersonCommand.ExecuteCommand = this.PersonModel.Show;
21
22         }
23
24
25     }
26 }

PersonViewModel

3.3 在项目根目录创建Commands文件夹,并新增一个PersonCommand,实现ICommand接口。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Windows.Input;
 7
 8 namespace MVVMDemo.Commands
 9 {
10     public class PersonCommand : ICommand
11     {
12         public Func<object, bool> CanExecuteCommand = null;
13         public Action<object> ExecuteCommand = null;
14
15         public bool CanExecute(object parameter)
16         {
17             if (CanExecuteCommand == null) return true;
18             return CanExecuteCommand(parameter);
19         }
20
21         public event EventHandler CanExecuteChanged;
22
23         public void Execute(object parameter)
24         {
25             if (ExecuteCommand == null) return;
26             ExecuteCommand(parameter);
27         }
28
29         public void OnCanExecuteChanged()
30         {
31             if (CanExecuteChanged == null) return;
32             CanExecuteChanged(this, EventArgs.Empty);
33         }
34     }
35 }

PersonCommand

3.4 MainWindow.xaml调用

 1 <Window x:Class="MVVMDemo.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         Title="MainWindow" Height="434.432" Width="607.471">
 5     <Grid Margin="0,0,2,5">
 6
 7         <TextBlock  Name="lbShow" Text="{Binding PersonModel.Name}" Margin="10,274,-10,10" />
 8         <Button Command="{Binding PersonCommand}" Height="20" Width="120" Margin="214,211,214,93" Content="MVVM"></Button>
 9        <!-- <Button  Height="20" Width="120" Content="{Binding ElementName=gb,Path=Value,UpdateSourceTrigger=PropertyChanged,Mode=OneWay}"></Button> -->
10     </Grid>
11 </Window>
 1 using MVVMDemo.ViewModel;
 2 using System.Windows;
 3
 4 namespace MVVMDemo
 5 {
 6     /// <summary>
 7     /// MainWindow.xaml 的交互逻辑
 8     /// </summary>
 9     public partial class MainWindow : Window
10     {
11         public MainWindow()
12         {
13             InitializeComponent();
14             this.DataContext = new PersonViewModel();
15
16         }
17     }
18 }

3.5测试结果

很简单的例子,希望能看懂,这是基础。

WPF MVVM模式

时间: 2024-10-13 22:27:43

WPF MVVM模式的相关文章

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模式下动画的实现

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

WPF MVVM模式中,通过命令实现窗体拖动、跳转以及显隐控制

在WPF中使用MVVM模式,可以让我们的程序实现界面与功能的分离,方便开发,易于维护.但是,很多初学者会在使用MVVM的过程中遇到一个显而易见且无法回避的问题,那就是不同的窗体之间如何跳转?很多人在介绍MVVM的使用时,都没有明显提到该如何解决这一问题,不知是因为觉得太简单了还是其他原因. 博主根据自己的开发经验,写了一个简单的示例程序,介绍MVVM模式中,如何通过命令来控制窗体的跳转.拖动与显隐控制. 先看效果: 主窗体中只有一个按钮,点击该按钮后,可以打开新的窗. 新窗体可以为自定义样式窗体

WPF/MVVM模式入门教程(二):实现INotifyPropertyChanged接口

1.创建NotifyPropertyChanged类 我们在common文件夹下创建一个名为NotifyPropertyChanged.cs的类,该类继承INotifyPropertyChanged接口主要用于消息通知,当UI里的值发生改变的时候,能够触发相应的改变. using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text;

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

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

简易的WPF MVVM模式开发

Model层 public class Song { private string _artistName; private string _songTitle; public string SongTitle { get { return _songTitle; } set { _songTitle = value; } } public string ArtistName { get { return _artistName; } set { _artistName = value; } }

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模式不用Prism

上一个例子使用了Prism.这个例子不用Prism.用自己封装的库LiuxhCSDLL,其实也差不多. 一.程序结构 二.界面代码以及界面效果 1 <Window x:Class="WPFMVVMExample.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/w

WPF MVVM初体验

首先MVVM设计模式的结构, Views: 由Window/Page/UserControl等构成,通过DataBinding与ViewModels建立关联: ViewModels:由一组命令,可以绑定的属性,操作逻辑构成:因为View与ViewModel进行了解耦,我们可以对ViewModel进行Unit Test: Models:可以是实体对象或者Web服务: 下面通过一个简单的例子,来介绍一些WPF MVVM模式.示例将展示一个图片浏览器,打开图片,放大/缩小图片大小.首先项目结构: UI