• WPF MVVM模式介绍


    WPF (Windows Presentation Foundation)是.NET Framework的一部分,它提供了一种用于构建丰富的Windows桌面应用程序的方式。MVVM (Model-View-ViewModel) 是一种特定于UI的设计模式,它利用强大的数据绑定特性,是WPF和其它XAML基础的开发框架的首选设计模式。

    MVVM模式将应用程序分为三个部分:

    1. Model(模型):模型代表的是数据和业务逻辑。它包括业务规则、数据访问、模型类等。
    2. View(视图):视图是用户看到和与之交互的界面。在WPF中,它通常是XAML文件。
    3. ViewModel(视图模型):ViewModel是视图的抽象,它包含视图中显示的状态和命令。换句话说,它是视图的功能性模型,并且是View和Model之间的连接器或者说适配器。

    MVVM的主要优点是分离视图和模型,这样就可以使每个部分独立进行开发、测试和修改,同时还能保证UI和业务逻辑的同步。

    下面是一个简单的WPF MVVM模式的代码示例:

    Model(Person.cs):

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ViewModel(PersonViewModel.cs):

    public class PersonViewModel : INotifyPropertyChanged
    {
        private Person _person;
    
        public PersonViewModel()
        {
            _person = new Person { Name = "Tom", Age = 30 };
        }
    
        public string PersonName
        {
            get { return _person.Name; }
            set
            {
                if (_person.Name != value)
                {
                    _person.Name = value;
                    OnPropertyChanged("PersonName");
                }
            }
        }
    
        public int PersonAge
        {
            get { return _person.Age; }
            set
            {
                if (_person.Age != value)
                {
                    _person.Age = value;
                    OnPropertyChanged("PersonAge");
                }
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        private void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    View(MainWindow.xaml):

    <Window x:Class="MVVMExample.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:MVVMExample"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <StackPanel>
                <Label Content="Name" />
                <TextBox Text="{Binding PersonName}" />
                <Label Content="Age" />
                <TextBox Text="{Binding PersonAge}" />
            StackPanel>
        Grid>
    Window>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这个例子中,我们创建了一个表示人的模型(Person)。视图模型(PersonViewModel)包含了一个人的实例,并有两个属性,分别对应人的名字和年龄。这两个属性在设置值时触发PropertyChanged事件,这样用户界面就可以知道值已经改变。最后,视图(MainWindow.xaml)中的两个文本框分别绑定到了视图模型的PersonName和PersonAge属性。

    注意,为了让这个例子工作,你需要在MainWindow的构造函数中设置DataContext:

    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new PersonViewModel();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这样,视图就可以通过数据绑定访问视图模型的属性了。

  • 相关阅读:
    Spring和SpringBoot比较,解惑区别
    【华为机试真题 JAVA】DNA序列-100
    带有 Spring AOP 和自定义注解的 Java 观察者模式
    大数据知识面试题-通用(2022版)
    python面向对象的三大特性:封装,继承,多态
    使用numpy计算相关系数矩阵:np.corrcoef()
    MYSQL(事务)
    【Java 进阶篇】保护你的应用:Java 过滤器实现敏感词汇过滤
    Linux用户空间与内核空间(理解高端内存)
    记一次线上偶发慢查排查过程_es资源初始化耗时
  • 原文地址:https://blog.csdn.net/yao_hou/article/details/134451830