MAUI中WeakReferenceMessenger替代MessagingCenter的等效用法咨询
MAUI WeakReferenceMessenger 替代 MessagingCenter 示例及说明
等效代码实现
WeakReferenceMessenger采用强类型消息机制,替代MessagingCenter的字符串键,需先定义对应消息类:
1. 定义强类型消息类
// 自定义消息类,替代原MessagingCenter中的"modechanged"字符串键 public class ModeChangedMessage { // 保存发送方实例(可选,根据需求决定是否保留) public ModePage Sender { get; } public ModeChangedMessage(ModePage sender) { Sender = sender; } }
2. 发送消息(替代MessagingCenter.Send)
// 通过WeakReferenceMessenger发送消息 WeakReferenceMessenger.Default.Send(new ModeChangedMessage(this));
3. 订阅消息(替代MessagingCenter.Subscribe)
// 订阅ModeChangedMessage类型的消息 WeakReferenceMessenger.Default.Register<ModeChangedMessage>(this, (recipient, message) => { // 执行原有的SetMode逻辑,可通过message.Sender获取发送方 SetMode(); });
可选:取消订阅
若需要显式取消订阅(比如页面销毁时),可调用:
WeakReferenceMessenger.Default.Unregister<ModeChangedMessage>(this);
关于"键"的传递与订阅说明
在WeakReferenceMessenger中没有单独的字符串键参数,它通过消息的类型(如ModeChangedMessage)来区分不同的消息,相当于用类型替代了MessagingCenter中的字符串键。
如果需要区分同类型但不同场景的消息,可以:
- 给消息类添加标识属性(比如
public string Tag { get; }),订阅时在回调中判断标识 - 定义不同的消息子类(比如
ModeChangedForSettingMessage、ModeChangedForDisplayMessage)
内容的提问来源于stack exchange,提问作者Sreejith Sree
相关产品推荐
相关产品推荐

