C#中如何通过MessagingCenter发送对象列表?
你调用MessagingCenter.Send时使用了仅支持单泛型参数的重载,该重载仅用于发送无附加数据的消息,泛型参数需要与传入的发送方实例类型完全匹配,无法携带List<BarData>作为消息参数。你需要使用支持携带附加数据的双泛型参数重载,写法如下:
发送端代码
假设你是在类型为HomePage的页面/MainViewModel的视图模型中发起发送,将第一个泛型参数替换为你实际的发送方类名即可:
// 第一个泛型参数:发送方的类型;第二个泛型参数:要传递的消息参数类型 MessagingCenter.Send<HomePage, List<BarData>>(this, "FaveBars", _favoriteBarsList);
如果不想限定发送方类型,也可以直接用object作为第一个泛型参数:
MessagingCenter.Send<object, List<BarData>>(this, "FaveBars", _favoriteBarsList);
接收端(FavoritesPage.xaml.cs)订阅代码
订阅的泛型参数需要和发送端完全保持一致:
// 写在页面初始化/OnAppearing方法中即可 MessagingCenter.Subscribe<HomePage, List<BarData>>(this, "FaveBars", (sender, receivedBars) => { // 此处receivedBars就是你传递的List<BarData>对象,可直接使用 });
如果发送端用了object作为泛型参数,订阅端写法对应调整为:
MessagingCenter.Subscribe<object, List<BarData>>(this, "FaveBars", (sender, receivedBars) => { // 业务逻辑 });
注意事项
页面销毁时需要主动取消订阅,避免内存泄漏,示例:
protected override void OnDisappearing() { base.OnDisappearing(); MessagingCenter.Unsubscribe<HomePage, List<BarData>>(this, "FaveBars"); }
内容的提问来源于stack exchange,提问作者Miranda Hall
相关产品推荐
相关产品推荐

