MAUI MVVM模式怎么实现 C# MAUI MVVM基础教程

来源:这里教程网 时间:2026-02-21 17:34:22 作者:

MAUI 中实现 MVVM 模式,核心是分离界面(View)、业务逻辑(ViewModel)和数据(Model),靠绑定(Binding)和命令(Command)驱动交互。不依赖第三方框架也能实现,但推荐用 .NET 内置的

INotifyPropertyChanged
ICommand
,再配合 MAUI 的
BindingContext
就能跑起来。

View 层:XAML 页面绑定 ViewModel

在页面(如

MainPage.xaml
)里,把
BindingContext
指向 ViewModel 实例。最常用方式是在构造函数中设置:

public MainPage()
{
    InitializeComponent();
    BindingContext = new MainViewModel(); // 关键:绑定 ViewModel
}

然后在 XAML 里用

{Binding}
绑定属性或命令:

<Label Text="{Binding WelcomeText}" />
<Button Text="点我" Command="{Binding ClickCommand}" />

ViewModel 层:实现 INotifyPropertyChanged + ICommand

ViewModel 是普通 C# 类,需通知界面属性变化,并提供可执行的命令。基础写法如下:

public class MainViewModel : INotifyPropertyChanged
{
    private string _welcomeText = "欢迎使用 MAUI MVVM";
    public string WelcomeText
    {
        get => _welcomeText;
        set
        {
            _welcomeText = value;
            OnPropertyChanged(); // 触发界面刷新
        }
    }
<pre class="brush:php;toolbar:false;">public ICommand ClickCommand { get; }
public MainViewModel()
{
    ClickCommand = new Command(OnClicked);
}
private void OnClicked()
{
    WelcomeText = "按钮被点击了!";
}
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

}

Model 层(按需):专注数据结构

Model 不强制要求,但建议把纯数据类(比如用户、订单)单独抽出来,不带逻辑也不实现通知接口:

例如
User.cs
只含
Id
Name
等自动属性
ViewModel 中可持有
User
实例,或通过属性暴露它(并确保该属性变更时触发通知)
如果 Model 本身需要响应式更新(比如实时编辑字段),才让它也实现
INotifyPropertyChanged

进阶提示:避免常见坑

别在 ViewModel 构造函数里直接调用耗时操作(如网络请求),建议配合
Task.Run
或用异步命令(
IAsyncCommand
,可用 CommunityToolkit.Mvvm 扩展)
BindingContext 赋值必须在
InitializeComponent()
之后,否则绑定无效
命令执行后若要更新 UI,确保修改的是已绑定的属性(且正确触发
OnPropertyChanged
调试时可在属性 setter 打断点,确认是否被调用;也可开启 MAUI 绑定日志:
MauiProgram.CreateBuilder().ConfigureLogging(b => b.AddConsole());

基本上就这些。MAUI MVVM 不复杂但容易忽略通知机制和绑定时机。写熟了以后,加新页面基本就是复制粘贴 View + 新建 ViewModel + 绑定属性三步走。

相关推荐