简单的说:MVVM实际上是三层架构,M层(Model实体层)、V层(View表示层,它有DataContext属性,这个属性可以使用DataTemplate模板绑定VM层的数据用来显示)、VM层(ViewModel层,对Model层进行CRUD进行操作,同时对V层提供数据绑定)
- 采用mvvm的好处:项目可测试更高,从而可以执行单元测试;将UI和业务的设计完全分开,View和UnitTest只是ViewModel的两个不同形式的消费者
-
Model的职责:主要提供基础实体的属性以及每个属性的验证逻辑;不包含数据的调用;不依赖于任何项目。
- ViewModel:
ViewModel是MVVM架构中最重要的部分,ViewModel中包含属性,命令,方法,事件,属性验证等逻辑。为了与View以及Model更好的交互来满足MVVM架构,ViewModel的设计需要注意一些事项或者约束:
ViewModel的属性:ViewModel的属性是View数据的来源。这些属性可由三部分组成:
一部分是Model的复制属性。
另一部分用于控制UI状态。例如一个弹出窗口的控件可能有一个IsClose的属性,当操作完成时可以通过这个属性更改通知View做相应的UI变换或者后面提到的事件通知。
第三部分是一些方法的参数,可以将这些方法的参数设置成相应的属性绑定到View中的某个控件,然后在执行方法的时候获取这些属性,所以一般方法不含参数。
ViewModel的命令:ViewModel中的命令用于接受View的用户输入,并做相应的处理。我们也可以通过方法实现相同的功能。
ViewModel的事件: ViewModel中的事件主要用来通知View做相应的UI变换。它一般在一个处理完成之后触发,随后需要View做出相应的非业务的操作。所以一般ViewModel中的事件的订阅者只是View,除非其他自定义的非View类之间的交互。
ViewModel的方法:有些事件是没有直接提供命令调用的,如自定义的事件。这时候我们可以通过CallMethodAction来调用ViewModel中的方法来完成相应的操作。
View Model一般有以下三个部分组成
1、属性:一个事物,它的类型可以是一个字符型,也可以是一个对象。实现接口INotifyPropertyChanged,那么任何UI元素绑定到这个属性,不管这个属性什么时候改变都能自动和UI层交互。
2、集合:事物的集合,它的类型一般是ObservableCollection,因此,任何UI元素绑定到它,不管这个集合什么时候改变,都可以自动的与UI交互。
3、Commands:一个可以被触发的事件,并且可以传递一个类型为Object的参数。但是前提是要实现接口ICommand。
主要有以下三个部分组成
1、把View Model层的属性绑定到 text box, radio button, toggle button, MediaElement, trigger an animation or ViewState change
2、把View Model层的集合绑定到ListBox,TreeView,DataGrid
3、Commands
使用InvokeCommandAction实现以下behavior
A、绑定View Model层的ICommand
B、指出你需要实现的ICommand(比如Click事件,Selected事件。。。)
C、传递参数
MVVM的简单实例
XAML代码
<Window x:Class="DeepXAML.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DeepXAML"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:cl="clr-namespace:System.Collections;assembly=mscorlib"
Title="MainWindow" Height="250" Width="450">
<StackPanel>
<TextBox Text="{Binding Path=Name}"></TextBox>
<TextBox Text="{Binding Path=Age}"></TextBox>
<Button Command="{Binding Path=AddAge}" >Add Age</Button>
</StackPanel>
</Window>
MainPageViewModel
public class MainPageViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string name;
public string Name {
get { return name; }
set {
name = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
}
}
}
private int age;
public int Age {
get { return age; }
set
{
age = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Age"));
}
}
}
public ICommand AddAge
{
get { return new AddAgeCommand(this); }
}
}
public class AddAgeCommand : ICommand
{
private MainPageViewModel mMainPageViewModel;
public AddAgeCommand(MainPageViewModel model)
{
mMainPageViewModel = model;
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
this.mMainPageViewModel.Age += 1;
}
}
我们可以看一下后台只有很少代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MainPageViewModel mainPageViewModel = new MainPageViewModel { Age = 20, Name = "Jack" };
this.DataContext = mainPageViewModel;
}
}
分享到:
相关推荐
MVVM(Model-View-ViewModel)是一种软件架构设计模式,它是实现视图和模型分离的一种方式,广泛应用于现代桌面应用程序和移动应用程序中。MVVM模式由微软的一些开发者提出,旨在简化基于Windows Presentation ...
在Android开发领域,MVVM(Model-View-ViewModel)架构模式已经成为了现代应用程序设计的主流选择。本项目“Android mvvm 框架,最流行的mvvm demo”旨在提供一个无bug的示例,帮助开发者深入理解并实践MVVM框架在...
**MVVM模式详解** MVVM(Model-View-ViewModel)是一种软件设计模式,广泛应用于现代UI开发,尤其是在WPF、Xamarin、Angular、React以及Vue等框架中。它源自MVC(Model-View-Controller)模式,但在UI层面上进行了...
“MVVM在Winform应用实例”这个标题揭示了本次讨论的主题,即如何在Windows Forms(Winform)应用程序中应用Model-View-ViewModel(MVVM)设计模式。MVVM是一种软件架构模式,它在WPF和UWP等现代UI框架中广泛使用,...
**WPF-MVVM编程**是一种在Windows Presentation Foundation(WPF)框架下开发用户界面时常用的设计模式。MVVM(Model-View-ViewModel)模式强调将业务逻辑、数据和用户界面进行分离,使得代码更加可测试、可维护,...
在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)应用程序中利用MVVMLight库进行页面间的导航。MVVMLight是由GalaSoft开发的一个轻量级MVVM(Model-View-ViewModel)框架,它为WPF和UWP提供了...
**C# MVVM 模式详解** MVVM(Model-View-ViewModel)模式是一种软件设计模式,常用于创建用户界面,特别是在WPF(Windows Presentation Foundation)和UWP(Universal Windows Platform)应用程序中。这个模式在C#...
在本文中,我们将深入探讨如何使用WPF(Windows Presentation Foundation)框架结合MvvmLight库创建一个简单的导航实例。MvvmLight是由GalaSoft开发的轻量级MVVM(Model-View-ViewModel)库,它为WPF应用提供了一...
MVVMLight,全称为MVVM Light Toolkit,是由GalaSoft公司开发的一个轻量级、易用的MVVM(Model-View-ViewModel)框架,适用于Windows Presentation Foundation (WPF)、Universal Windows Platform (UWP)、Xamarin...
MVVM源于MVC(Model-View-Controller)模式,期间还演化出MVP(Model-View-Presenter)模式。MVVM的出现促进了GUI前端开发和后端开发逻辑的分离,提高了前端开发效率。 MVVM的核心是数据驱动即ViewModel,ViewModel是...
在Windows Presentation Foundation (WPF) 中,MVVM(Model-View-ViewModel)是一种设计模式,它将业务逻辑、用户界面和数据模型分离,使得代码更易于维护和测试。本篇文章将详细探讨如何在MVVM模式下有效地使用...
【标题】"DevExpress WinForm MVVM Demo"是一个展示如何在Windows Forms应用程序中使用Model-View-ViewModel(MVVM)设计模式的示例项目。DevExpress是一家知名的软件开发公司,提供了一系列强大的UI控件和开发工具...
dotnet-communitytoolkit-mvvm CommunityToolkit.Mvvm 是一个现代、快速且模块化的 MVVM 库,作为 .NET 社区工具包的一部分。它围绕以下原则构建:平台和运行时独立、易于选取和使用、点菜自由选择要使用的组件、...
**MVVM Light 小实例详解** MVVM Light(Model-View-ViewModel Light)是由 Laurent Bugnion 创建的一个轻量级框架,它简化了在 Silverlight、WPF 和 Xamarin 平台上的 MVVM(Model-View-ViewModel)设计模式的实现...
**WPF MVVMLight框架详解** MVVMLight是GalaSoft公司开发的一个轻量级、易用的MVVM(Model-View-ViewModel)框架,它为Windows Presentation Foundation(WPF)应用程序提供了强大的支持。该框架简化了MVVM模式的...
**WPF MVVM完整示例(登录窗口)** 在Windows Presentation Foundation (WPF)中,Model-View-ViewModel (MVVM)是一种常见的设计模式,它将业务逻辑、用户界面和数据模型分离,使得代码更加可测试和易于维护。本示例...
《深入理解MVVM架构在项目开发中的应用》 MVVM(Model-View-ViewModel)架构是一种广泛应用于现代软件开发,特别是在移动应用和Web应用中的设计模式。它将应用程序的业务逻辑、用户界面和数据模型分离开来,提高了...
**WPF轻量级MVVM框架入门2.1.2** 在Windows Presentation Foundation(WPF)开发中,MVVM(Model-View-ViewModel)模式是一种常见的设计模式,它有助于实现应用程序的视图与业务逻辑之间的解耦。MVVM通过数据绑定、...
**C# MVVM架构简介** MVVM(Model-View-ViewModel)是一种软件设计模式,尤其在开发WPF、UWP和Xamarin等基于.NET Framework的桌面应用或移动应用时广泛应用。该模式源自经典的MVC(Model-View-Controller)模式,但...