C# 如何在 WPF 中使用 MVVM 模式_C# WPF MVVM 模式应用教程

幻夢星雲
发布: 2025-11-06 08:11:34
原创
861人浏览过
答案:本文介绍了在WPF中通过MVVM模式实现界面与业务逻辑分离的方法,包括创建Models、ViewModels和Views三层结构,使用INotifyPropertyChanged接口实现数据绑定,通过RelayCommand处理用户命令,并在XAML中绑定DataContext与ICommand,从而实现解耦和可维护的代码架构。

c# 如何在 wpf 中使用 mvvm 模式_c# wpf mvvm 模式应用教程

在 WPF 中使用 MVVM(Model-View-ViewModel)模式,可以让界面与业务逻辑清晰分离,提升代码的可维护性和可测试性。下面介绍如何在 C# WPF 项目中实现 MVVM 模式,从结构搭建到数据绑定和命令处理。

创建基本项目结构

新建一个 WPF 应用程序后,建议按功能划分文件夹,使结构更清晰:

  • Views:存放 XAML 界面文件(如 MainWindow.xaml、UserControl 等)
  • ViewModels:存放 ViewModel 类,负责提供 View 所需的数据和命令
  • Models:存放数据模型,表示业务实体

例如,创建一个简单的用户信息展示功能:

Models/User.cs
public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
}
登录后复制

ViewModels/MainViewModel.cs

using System.ComponentModel;
<p>public class MainViewModel : INotifyPropertyChanged
{
private string _name;
private int _age;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">public string Name
{
    get => _name;
    set
    {
        _name = value;
        OnPropertyChanged(nameof(Name));
    }
}

public int Age
{
    get => _age;
    set
    {
        _age = value;
        OnPropertyChanged(nameof(Age));
    }
}

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
登录后复制

}

设置数据绑定

在 View 中绑定 ViewModel 的属性,让界面自动响应数据变化。

Views/MainWindow.xaml
<Window x:Class="MvvmApp.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MVVM 示例" Height="200" Width="300">
    <StackPanel Margin="20">
        <TextBlock Text="姓名:" />
        <TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
        <TextBlock Text="年龄:" Margin="0,10,0,0" />
        <TextBox Text="{Binding Age, UpdateSourceTrigger=PropertyChanged}" />
    </StackPanel>
</Window>
登录后复制

在窗口加载时设置 DataContext:

MainWindow.xaml.cs
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MainViewModel();
    }
}
登录后复制

这样,文本框会自动显示 ViewModel 中的值,并在用户输入时更新属性。

使用 ICommand 处理用户操作

ViewModel 不应直接引用 UI 元素,通过 ICommand 实现按钮点击等交互。

添加一个“保存”命令到 ViewModel:

无阶未来模型擂台/AI 应用平台
无阶未来模型擂台/AI 应用平台

无阶未来模型擂台/AI 应用平台,一站式模型+应用平台

无阶未来模型擂台/AI 应用平台 35
查看详情 无阶未来模型擂台/AI 应用平台
using System.Windows.Input;
<p>public class MainViewModel : INotifyPropertyChanged
{
// ... 其他属性</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">public ICommand SaveCommand => new RelayCommand(Save);

private void Save()
{
    MessageBox.Show($"保存用户:{Name}, 年龄:{Age}");
}

// 实现 INotifyPropertyChanged ...
登录后复制

}

需要定义一个简单的 RelayCommand:

Commands/RelayCommand.cs
using System;
using System.Windows.Input;
<p>public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">public RelayCommand(Action execute, Func<bool> canExecute = null)
{
    _execute = execute;
    _canExecute = canExecute;
}

public bool CanExecute(object parameter) => _canExecute == null || _canExecute();

public void Execute(object parameter) => _execute();

public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}
登录后复制

}

在 XAML 中绑定命令:

<Button Content="保存" Command="{Binding SaveCommand}" Margin="0,10" />
登录后复制

点击按钮时会调用 ViewModel 中的 Save 方法,完全解耦 UI 和逻辑。

整合资源与导航(可选进阶)

大型应用中,可以使用 ViewModelLocator 或依赖注入容器(如 Microsoft.Extensions.DependencyInjection)统一管理 ViewModel 创建。

也可以通过 Messenger 或事件聚合器实现跨 ViewModel 通信,避免紧耦合。

基本上就这些。掌握属性通知、数据绑定和命令机制,就能在 WPF 中有效使用 MVVM 模式。不复杂但容易忽略细节,比如忘记设置 DataContext 或未正确触发 PropertyChanged。多练习几个小功能,很快就能上手。

以上就是C# 如何在 WPF 中使用 MVVM 模式_C# WPF MVVM 模式应用教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号