WPF MVVM开发模式介绍

什么是MVVM

在 WPF 开发中,MVVM(Model-View-ViewModel)是一种常用的设计模式。它是为了更好地实现用户界面与业务逻辑之间的分离,从而使应用程序更易于维护和扩展。以下是 MVVM 模式的三个主要组成部分:

Model:模型代表程序中的数据和业务逻辑。它通常包含数据访问和数据处理的代码,例如访问数据库或 Web 服务。模型通常不知道视图和视图模型的存在。

View:视图是用户界面的表示,通常是 XAML 文件。视图包含用户界面的所有元素(如按钮,文本框等)。视图绑定到视图模型,但它并不知道模型的存在。

ViewModel :视图模型是视图和模型之间的桥梁。它包含可以直接绑定到视图的属性,这些属性通常是模型的一种表示。视图模型还包含命令(通常实现 ICommand 接口),视图可以通过这些命令与视图模型交互。视图模型可以访问模型,但通常不知道视图的存在。

以下是一个简单的 MVVM 示例:

Model:

CSharp 复制代码
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

ViewModel:

CSharp 复制代码
public class PersonViewModel : INotifyPropertyChanged
{
    private Person person;

    public PersonViewModel()
    {
        person = new Person { FirstName = "John", LastName = "Doe" };
    }

    public string FirstName
    {
        get { return person.FirstName; }
        set
        {
            if (person.FirstName != value)
            {
                person.FirstName = value;
                OnPropertyChanged("FirstName");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

View (XAML):

XML 复制代码
<Window x:Class="MVVMDemo.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:MVVMDemo"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox Text="{Binding FirstName, UpdateSourceTrigger=PropertyChanged}" />
    </Grid>
</Window>

在这个例子中,Person 是模型,PersonViewModel 是视图模型,MainWindow 是视图。视图模型通过实现 INotifyPropertyChanged 接口来通知视图属性的更改。视图通过数据绑定来显示和更新视图模型中的数据。

如何理解MVVM中的 View 和 ViewModel?

在 MVVM(Model-View-ViewModel)设计模式中,View 和 ViewModel 是两个核心的组成部分。以下是对它们的详细解释:

View(视图)

在 MVVM 模式中,View 是用户看到和与之交互的界面。它包含了用户界面元素,如文本框,按钮,列表等。在 WPF 中,视图通常由 XAML 语言定义,它描述了界面的布局和样式。

View 的主要职责是展示 ViewModel 提供的数据,并且响应用户的操作。它通过数据绑定与 ViewModel 进行交互,以获取和显示数据,同时将用户操作转化为对 ViewModel 的命令。

值得注意的是,按照 MVVM 的设计理念,View 应该尽量避免包含任何业务逻辑或状态,它只负责显示数据和收集用户输入。

ViewModel(视图模型)

ViewModel 是 View 和 Model 之间的桥梁。它包含 View 需要展示的数据,以及 View 可以执行的命令。

ViewModel 通常会包含一些属性,这些属性对应于 View 中要显示的数据。当这些属性的值发生改变时(例如,由于用户输入或后台数据变化),ViewModel 会通知 View 进行更新。这是通过实现 INotifyPropertyChanged 接口来实现的。

ViewModel 还包含一些命令(实现 ICommand 接口的对象),这些命令对应于用户可以在 View 上执行的操作。通过命令,View 可以在用户执行某些操作(如点击按钮)时通知 ViewModel。

ViewModel 不应该直接引用 View 或者对 View 的具体实现有所了解。这样可以确保 View 和 ViewModel 的解耦,从而使得 View 可以容易地更换,而 ViewModel 可以容易地进行单元测试。

总的来说,View 和 ViewModel 在 MVVM 设计模式中严格遵循单向依赖和松散耦合的原则。View 了解 ViewModel,但 ViewModel 对 View 一无所知。这使得 ViewModel 可以独立于 View 进行测试,同时 View 也可以独立于 ViewModel 进行设计和修改。

相关推荐
芝麻科技14 小时前
使用ValueConverters扩展实现枚举控制页面的显示
wpf·prism
笑非不退1 天前
Wpf Image 展示方式 图片处理 显示
开发语言·javascript·wpf
△曉風殘月〆2 天前
在WPF中实现多语言切换的四种方式
wpf·多语言切换
笑非不退2 天前
WPF C# 读写嵌入的资源 JSON PNG JPG JPEG 图片等资源
c#·wpf
He BianGu2 天前
演示:基于WPF的DrawingVisual开发的频谱图和律动图
wpf·示波器·曲线图·频谱分析仪·频谱图·高性能曲线·自绘
笑非不退5 天前
WPF 设计属性 设计页面时实时显示 页面涉及集合时不显示处理 设计页面时显示集合样式 显示ItemSource TabControl等集合样式
wpf
△曉風殘月〆6 天前
WPF中的XAML详解
wpf·xaml
ithouse6 天前
使用WPF实现一个快速切换JDK版本的客户端工具
java·开发语言·wpf
河西石头6 天前
WPF之UI进阶--控件样式与样式模板及词典
ui·wpf·样式·模板·控件样式·样式模板·样式词典
TA远方6 天前
【WPF】桌面程序开发之窗口的用户控件详解
c#·wpf·usercontrol·用户控件·控件属性