多个ViewModel之间的数据共享

2024-03-28

进一步我的问题如何绑定多个型号的 Bing 图钉? https://stackoverflow.com/questions/7305582/how-can-i-bind-bing-pushpins-from-multiple-models

这对我来说很新,我一直在网上搜索,但似乎有很多不同的 MVVM 方法,然后添加到 WP7 中,我有点困惑

我现在正在尝试找出在 ViewModel 之间共享数据的最佳方法,或者即使这是最好的方法。

我的意思是我有,例如

我的模型:PeopleModel、BuildingModel 我的 ViewModels:PeopleViewModel、BuildingViewModel(其中包含模型的 Observable 集合)

目前,计时器用于从 Web 服务更新列表。 ViewModel 因为它是静态的,所以能够在应用程序的生命周期内更新。我不确定这是最明智的方法,但我需要某种形式的后台同步来满足要求。

人物和建筑物包含一个位置,但不包含任何有关应将什么图像显示为图钉的信息。所以我在想,如果我的地图视图包含一个以某种方式链接到 ViewModel 的 MapViewModel,但我不确定你会如何做到这一点。

我查看了 MVVMLight ,似乎您可以在开始时注册 ViewModel,这样就可以添加到其他 ViewModel 的链接,而不用担心它们的生命周期?

然而,考虑到模型中存在地图不感兴趣的额外信息,我想知道是否最好拥有一个独立的 MapViewModel,其中包含某种类型的自定义图钉列表(例如 PeoplePushpins、BuildingPushpins)。如果我走这条路,我想知道如何从其他模型中更新的数据更新 MapViewModel。

我的意思是 PersonViewModel 中运行的计时器检测到列表中的更改,因此更新其自己的列表。我需要向地图发送通知,告知地图有更新,然后地图将根据该更新进行自我更新。

非常感谢收到的任何帮助/建议。


通过 MVVMLight,您可以使用消息传递在模型之间发送数据:

//build class to send as message  
public class AddPushPinMessage
{
    public PushPin PushPin { get; set; }
}

public class ReceivingViewModel
{
  public ReceivingViewModel()
  {
     Messenger.Default.Register<AddPushPinMessage>(this, (m) => AddPushPin(m));
  }

  void AddPushPin(AddPushPinMessage msg)
  {
     //handle message
  }
}

public class SendingViewModel
{
  private object SendPushPin(PushPin key)
  { 
    Messenger.Default.Send<AddPushPinMessage>(new SetPushPinMessage() { PushPin = key });

    return null;
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个ViewModel之间的数据共享 的相关文章