首页 > 其他分享 >WPF新境界:MVVM设计模式解析与实战,构建清晰可维护的用户界面

WPF新境界:MVVM设计模式解析与实战,构建清晰可维护的用户界面

时间:2024-02-16 09:01:39浏览次数:22  
标签:FirstName MVVM 模型 视图 person WPF 设计模式 public

 

概述:MVVM是一种在WPF开发中广泛应用的设计模式,通过将应用程序分为模型、视图、和视图模型,实现了解耦、提高可维护性的目标。典型应用示例展示了如何通过XAML、ViewModel和数据绑定创建清晰、可测试的用户界面。

什么是MVVM?

MVVM(Model-View-ViewModel)是一种用于构建用户界面的软件设计模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和视图模型(ViewModel)。MVVM的目标是实现界面逻辑与用户界面的分离,提高代码的可维护性和可测试性。

为什么要用MVVM?

MVVM带来了以下优点:

  1. 松散耦合: 模型、视图、和视图模型相互独立,降低了各个组件之间的耦合度。
  2. 可维护性: 分离关注点使得代码更易于理解和维护。
  3. 可测试性: 视图模型可以方便地进行单元测试,无需依赖具体的UI元素。

MVVM应用实例:

1.创建模型(Model):定义数据模型。

public class PersonModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

2.创建视图模型(ViewModel):实现业务逻辑和与视图相关的命令。

public class PersonViewModel : INotifyPropertyChanged
{
    private PersonModel _person;

    public PersonViewModel()
    {
        _person = new PersonModel();
    }

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

    public string LastName
    {
        get { return _person.LastName; }
        set
        {
            if (_person.LastName != value)
            {
                _person.LastName = value;
                OnPropertyChanged(nameof(LastName));
            }
        }
    }

    // INotifyPropertyChanged实现省略...

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

    public event PropertyChangedEventHandler PropertyChanged;
}

3.创建视图(View):利用XAML定义用户界面。

<Window x:Class="MVVMSample.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:MVVMSample"
        mc:Ignorable="d"
        Title="MainWindow" Height="200" Width="300">
    <Grid>
        <StackPanel Margin="10">
            <TextBox Text="{Binding FirstName}" Margin="0 0 0 5"/>
            <TextBox Text="{Binding LastName}" Margin="0 0 0 5"/>
            <Button Content="Submit" Command="{Binding SubmitCommand}"/>
        </StackPanel>
    </Grid>
</Window>

4.将视图与视图模型关联:在视图的代码-behind或XAML中,将DataContext设置为视图模型的实例。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        // 关联视图模型
        DataContext = new PersonViewModel();
    }
}

5.实现提交命令(Command):在视图模型中定义和实现命令。

public class PersonViewModel : INotifyPropertyChanged
{
    // 其他代码省略...

    public ICommand SubmitCommand => new RelayCommand(Submit);

    private void Submit()
    {
        MessageBox.Show($"Submitted: {FirstName} {LastName}");
    }
}

MVVM设计模式通过将应用程序分为模型、视图和视图模型,实现了解耦和分离关注点的目标。上述实例演示了如何在WPF中应用MVVM,通过数据绑定和命令使得界面逻辑更清晰、易于测试和维护。

 

标签:FirstName,MVVM,模型,视图,person,WPF,设计模式,public
From: https://www.cnblogs.com/hanbing81868164/p/18016896

相关文章

  • SpringBoot整合OSS中的设计模式----单例模式
    在SpringBoot项目中使用OSS存储上传的图片,需要配置OSS设置信息。避免对象的重复创建,确保一个类只有一个实例,并提供一个全局访问点来访问该实例,于是用到了单例模式,这里复习一下单例模式。单线程----懒汉式@Data@Component@ConfigurationProperties(prefix="aliyun.oss")pu......
  • 设计模式之单例模式
    经过多方博客,文章参考,枚举是实现单例模式的最好方式publicenumSingleton{INSTANCE;publicvoidbusinessMethod(){System.out.println("我是一个单例!");}}publicclassMainClass{publicstaticvoidmain(String[]args){Si......
  • 设计模式--策略模式(Strategy Pattern)
    策略模式(StrategyPattern)是一种行为设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户端。策略模式主要包含以下几个角色:Strategy(策略):这是一个接口,通常用于定义所有支持的算法的公共接口。ConcreteStrategy(具体策略):这是实现了S......
  • 【转】【WPF】HandyControl调整样式色系
    资源引用以案例项目App.xaml作为系统资源入口,存在如下关系App.xaml:<Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary><ResourceDictionary.......
  • 设计模式--行为型模式
    设计模式--行为型模式目录设计模式--行为型模式模板方法模式定义结构举个栗子策略模式定义结构举个栗子命令模式定义结构举个栗子责任链模式定义结构举个例子状态模式定义结构举个栗子使用场景观察者模式定义结构举个栗子中介模式定义结构举个栗子迭代器模式定义结构举个栗子访问......
  • 设计模式--结构型模式
    设计模式--结构型模式目录设计模式--结构型模式代理模式静态代理jdk动态代理(接口实现原理)Cblib动态代理(继承原理)适配器模式类适配器模式对象适配器模式接口适配器模式装饰者模式使用场景:静态代理与装饰者模式的区别:桥接模式使用场景外观模式组合模式享元模式代理模式结构:......
  • 设计模式--桥接模式(Bridge Pattern)
    桥接模式(BridgePattern)是一种结构型设计模式,它主要是用于将抽象部分与实现部分分离,使它们可以独立地变化。桥接模式主要包含以下几个角色:Abstraction(抽象类):定义抽象类的接口,它维护对Implementor的引用。RefinedAbstraction(扩充抽象类):扩充由Abstraction定义的接口。Implement......
  • 【C#】【WPF】WPF开源控件库HandyControl应用
    1、首先使用nuget包管理器下载handycontrol 2、app.xaml里面引用,这样可以使用里面的样式<Applicationx:Class="HandyControlTest.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microso......
  • 设计模式
    设计模式创建一个接口;publicinterfaceShape{voiddraw();}创建实现接口的实体类;publicclassRectangleimplementsShape{@Overridepublicvoiddraw(){System.out.println("InsideRectangle::draw()method.");}}创建一个工厂......
  • Python实现软件设计模式10:装饰器模式 Decorator Pattern
    概念是一种对象结构型模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为是一种用于替代继承的技术,他通过一种无须定义子类的方式给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增......