簡體   English   中英

多個ViewModel之間的數據共享

[英]Data sharing between multiple ViewModels

繼我的問題如何從多個模型綁定Bing Pushpins?

這對我來說是一個新手,我一直在網上搜索,但似乎有很多不同的MVVM方法,然后在WP7中添加,我有點困惑

我現在正在嘗試找出在ViewModel之間共享數據的最佳方法,即使這是最好的方法。

我的意思是我有,例如

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

目前,Timer用於從Web服務更新列表。 ViewModel因為它是靜態的,所以能夠在應用程序的生命周期內更新。 我不確定這是最明智的方法,但我需要某種形式的背景同步來滿足要求。

人物和建築物包含一個位置,但沒有任何關於它應該顯示為圖釘的圖像。 所以我在想我是否有一個包含MapViewModel的地圖視圖,該視圖以某種方式鏈接到ViewModel但我不知道你會怎么做。

我看了MVVMLight,似乎你可以在開始時注冊ViewModel,這樣可以添加到其他ViewModel的鏈接而不用擔心它們的生命周期?

然而,鑒於模型中存在地圖不感興趣的額外信息,我想知道是否更好地擁有一個包含某種類型的自定義圖釘列表的自包含MapViewModel(所以PeoplePushpins,BuildingPushpins)。 如果我走這條路線,我想知道如何從其他模型中更新的數據更新MapViewModel。

我的意思是PersonViewModel中的運行計時器檢測到列表中的更改,因此更新自己的列表。 我需要向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;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM