多个ViewModel之间的数据共享

时间:2011-09-06 08:28:15

标签: silverlight windows-phone-7 mvvm mvvm-light

继我的问题how can I bind Bing Pushpins from multiple models?

之后

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

我现在正试图找出在ViewModels之间共享数据的最佳方式,即使这是最好的方法。

我的意思是我有,例如<​​/ p>

我的模特:PeopleModel,BuildingModel 我的ViewModel:PeopleViewModel,BuildingViewModel(包含模型的Observable集合)

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

人物和建筑物包含一个位置,但没有任何关于它应该显示为图钉的图像。所以我在想我是否有一个包含MapViewModel的地图视图,该视图以某种方式链接到ViewModel但我不知道你会怎么做。

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

然而,鉴于地图不感兴趣的模型中有额外的信息,我想知道是否更好地拥有一个包含某种类型的自定义图钉列表的自包含MapViewModel(所以PeoplePushpins,BuildingPushpins)。如果我走这条路线,我想知道如何从其他模型中更新的数据更新MapViewModel。

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

感激不尽的任何帮助/建议。

1 个答案:

答案 0 :(得分:2)

使用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;
  }
}