关注

CommunityToolkit.Mvvm 全网最细详解(MVVM 终极神器)

CommunityToolkit.Mvvm 全网最细详解(MVVM 终极神器)

CommunityToolkit.Mvvm(也称 MVVM Toolkit)是微软官方推出的 现代化、轻量、源码生成、零冗余 MVVM 工具库。

它直接替代手写 INotifyPropertyChanged、ICommand、多值转换器,你之前学的手写代码 全部可以删掉,用它写 MVVM 效率提升 10 倍!


一、它解决什么痛点?

你之前手写:

  • ViewModelBase(INPC)
  • RelayCommand 通用命令
  • 一堆通知属性
  • 转换器

CommunityToolkit.Mvvm:✅ 不用写基类不用写命令类只用特性标签,自动生成代码支持 .NET 所有平台(WPF / MAUI / Avalonia 等)


二、第一步:安装 NuGet

搜索安装:

CommunityToolkit.Mvvm

或 NuGet 命令:

Install-Package CommunityToolkit.Mvvm

三、核心功能 1:自动属性通知(ObservableObject)

不用手写 OnPropertyChanged!只用一个特性:[ObservableProperty]

示例(直接写在 ViewModel 里)

using CommunityToolkit.Mvvm.ComponentModel;

// 继承 ObservableObject 即可
public partial class MainViewModel : ObservableObject
{
    // 🔥 自动生成:public string UserName { get; set; } + 通知
    [ObservableProperty]
    private string _userName;

    [ObservableProperty]
    private int _age;
}

规则(超级重要)

  1. 字段必须是 私有 + 小驼峰_userName
  2. 自动生成 公共属性UserName
  3. 自动实现 属性变更通知
  4. 类必须是 partial

四、核心功能 2:命令绑定(ICommand 自动生成)

不用写 RelayCommand!只用特性:[RelayCommand]

示例 1:无参数命令

[RelayCommand]
void ShowInfo()
{
    MessageBox.Show($"姓名:{UserName},年龄:{Age}");
}

✅ 自动生成命令:ShowInfoCommand

<Button Command="{Binding ShowInfoCommand}" Content="点击" />

示例 2:带参数命令

[RelayCommand]
void DeleteItem(string id)
{
    MessageBox.Show("删除:" + id);
}
<Button Command="{Binding DeleteItemCommand}" CommandParameter="123" />

示例 3:带 CanExecute(控制按钮可用)

[RelayCommand(CanExecute = nameof(CanSubmit))]
void Submit()
{
    MessageBox.Show("提交成功");
}

// 条件:UserName 不为空才能提交
bool CanSubmit() => !string.IsNullOrWhiteSpace(UserName);

五、核心功能 3:属性联动(自动监听依赖)

[AlsoNotifyChangeFor]当 A 变,自动通知 B 也更新。

[ObservableProperty]
[AlsoNotifyChangeFor(nameof(FullInfo))]
private string _userName;

[ObservableProperty]
[AlsoNotifyChangeFor(nameof(FullInfo))]
private int _age;

// 组合属性
public string FullInfo => $"{UserName} ({Age}岁)";

六、核心功能 4:多值绑定简化(不用手写转换器)

你之前学的 MultiBinding,用这个库可以直接在 ViewModel 组合好,UI 不用写转换器!

public string ShowText => $"{UserName} - {Age} 岁";

直接绑定:

xml

<TextBlock Text="{Binding ShowText}" />

七、完整可运行 Demo(复制即用)

1. ViewModel

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Windows;

namespace WpfApp
{
    public partial class MainViewModel : ObservableObject
    {
        [ObservableProperty]
        private string _userName;

        [ObservableProperty]
        private int _age;

        // 自动命令
        [RelayCommand]
        void ShowMsg()
        {
            MessageBox.Show($"姓名:{UserName}\n年龄:{Age}");
        }
    }
}

2. 窗口绑定

xml

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MVVM Toolkit Demo" Height="300" Width="400">
    <Grid Margin="20">
        <StackPanel>
            <TextBox Text="{Binding UserName, UpdateSourceTrigger=PropertyChanged}"
                     Placeholder="输入姓名"/>
            <TextBox Text="{Binding Age}" Margin="0 5"
                     Placeholder="输入年龄"/>
            <TextBlock Text="{Binding UserName}" Margin="0 10"/>
            
            <Button Command="{Binding ShowMsgCommand}"
                    Content="显示信息" />
        </StackPanel>
    </Grid>
</Window>

3. 后台设置 DataContext

public MainWindow()
{
    InitializeComponent();
    DataContext = new MainViewModel();
}

八、最常用特性速查表(必收藏)

特性作用
[ObservableProperty]自动生成通知属性
[RelayCommand]自动生成 ICommand 命令
[AlsoNotifyChangeFor]属性联动通知
[ICommand]自定义命令
ObservableObjectMVVM 基类

九、总结(一句话记住)

CommunityToolkit.Mvvm = MVVM 开发终极简化神器

  • 自动属性通知
  • 自动命令生成
  • 无冗余代码
  • 微软官方维护
  • WPF 开发 标准必备

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/cjh16606260986/article/details/158730103

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--