silverlight - 多个 ViewModel 之间的数据共享

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

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

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

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

我的意思是我有,比如

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

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

People 和 Building 包含一个位置,但不包含任何关于它应该显示为图钉的图像。所以我在想,如果我有一个包含以某种方式链接到 ViewModel 的 MapViewModel 的 map View ,但我不确定您将如何执行此操作。

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

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

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

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

最佳答案

借助 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;
  }
}

关于silverlight - 多个 ViewModel 之间的数据共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7316965/

相关文章:

javascript - 在 Windows Phone 7 模拟器浏览器中调试?

c# - 计算通过 Windows Phone 行进的距离。

c# - 异常在异步代码块中被忽略

c# - Silverlight UserControl Parent 在其构造函数中始终为 Null。有什么建议吗?

c# - 播放加密的mp3文件

c# - 如果已安装,silverlight 应用程序是否可以始终使用浏览器外应用程序?

wpf - 将 CheckBox IsChecked 绑定(bind)到 Stackpanel 可见性

c# - 向上增加矩形高度

c# - 如何使用 DataTemplate 访问列表框中的特定项目?

c# - 调用线程无法访问此对象,因为另一个线程拥有它 - BackgroundWorker 错误