You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CommunityToolKit Mvvm 8.2.2如何注册int作为TMessage?

解决CommunityToolKit Mvvm中值类型作为消息的问题

直接使用int这类值类型作为TMessage注册消息时,会触发CS0452错误——原因是CommunityToolKit Mvvm的IMessengerExtensions.Register方法要求TMessage必须是引用类型,这和MVVMLightLibs的设计逻辑不同。

两种可行解决方案:

1. 自定义值类型包装消息类

创建一个包含值类型属性的引用类型类来承载消息:

public class IntMessage
{
    public int Value { get; }

    public IntMessage(int value)
    {
        Value = value;
    }
}

注册与使用示例:

int lastRecievedInt = -1;

// 注册消息
StrongReferenceMessenger.Default.Register<MessengerTest, IntMessage>(this, (r, m) => lastRecievedInt = m.Value);

// 发送消息
StrongReferenceMessenger.Default.Send(new IntMessage(42));

2. 使用框架自带的ValueChangedMessage<T>

CommunityToolKit Mvvm提供了专门用于包装值类型的ValueChangedMessage<T>,无需自定义类:

int lastRecievedInt = -1;

// 注册消息
StrongReferenceMessenger.Default.Register<MessengerTest, ValueChangedMessage<int>>(this, (r, m) => lastRecievedInt = m.Value);

// 发送消息
StrongReferenceMessenger.Default.Send(new ValueChangedMessage<int>(42));

补充说明

CommunityToolKit Mvvm的Messenger设计优先支持引用类型消息,以此优化弱引用管理、消息过滤等核心特性;而MVVMLightLibs对值类型消息做了额外适配,因此两者出现了使用差异。

内容的提问来源于stack exchange,提问作者PJepsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:57:09