CommunityToolKit Mvvm 8.2.2 如何将 Integer 注册为 TMessage

问题描述 投票:0回答:1

我正在尝试将一个整数注册为 TMessage,但似乎不可能。如果我没记错的话,在 MVVMLightLibs 中是可能的。

这是给出错误的代码

int lastRecievedInt = -1;

StrongReferenceMessenger.Default.Register<MessengerTest, int>(this, (r, m) => lastRecievedInt = m);

我收到以下错误:

CS0452 类型

int
必须是引用类型才能将其用作泛型类型或方法中的参数
TMessage
IMessengerExtensions.Register<TRecipient, TMessage>(IMessenger, TRecipient, MessageHandler<TRecipient, TMessage>)

c# mvvm community-toolkit-mvvm
1个回答
0
投票

正如您在 doc 中看到的,

TMessage
需要是引用类型。

public static void Register<TRecipient,TMessage>
    (this Microsoft.Toolkit.Mvvm.Messaging.IMessenger messenger,
     TRecipient recipient,
     Microsoft.Toolkit.Mvvm.Messaging.MessageHandler<TRecipient,TMessage> handler)
     where TRecipient : class
     where TMessage : class;

所以,你不能传递像

int
这样的值类型。相反,您需要将其包装在一个类中。例如:

public class IntMessage(int value)
{
    public int Value { get; } = value;
}
© www.soinside.com 2019 - 2024. All rights reserved.