2011-09-06 59 views
3

之間共享繼我的問題how can I bind Bing Pushpins from multiple models?數據多的ViewModels

這是相當新的給我,我一直在通過網絡搜索,但似乎有這麼多不同的方法來MVVM,然後加在WP7和我有一個有點困惑

我現在試圖找出在ViewModels之間共享數據的最佳方式,或者即使這是最好的方式來做到這一點。

我的意思是我有,例如

我的模型:PeopleModel,BuildingModel 我的ViewModels:PeopleViewModel,BuildingViewModel(其中包含模型的觀察集合)

目前使用定時器從Web服務更新列表。 ViewModel由於是靜態的,因此可以在應用程序的生命週期中進行更新。我不確定這是最明智的方法,但我需要某種形式的後臺同步來滿足要求。

人與建築物包含一個位置,但沒有任何關於它應該顯示爲圖釘的圖像。所以我在想,如果我有一個我的地圖視圖包含一個MapViewModel,它與ViewModel有某種聯繫,但我不確定你會怎麼做。

我看着MVVMLight,看起來你可以在開始時註冊ViewModels,所以可以添加鏈接到其他ViewModels而不用擔心它們的生命週期?

但是考慮到存在該地圖是不感興趣的我不知道,如果是最好有一個包含某種類型的自定義圖釘列出了自包含MapViewModel模型中的額外信息(所以PeoplePushpins,BuildingPushpins)。如果我走這條路線,我想知道如何從其他模型中更新的數據更新MapViewModel。

我的意思是PersonViewModel中的運行計時器檢測列表中的更改,因此更新它自己的列表。我需要向Map發送通知,說明有一個更新會隨之更新。

任何幫助/建議感激地收到。

+0

能否請你不要前面加上一個標籤你的問題的標題?你的問題已經得到了WP7標籤。標籤的工作很好,在這裏很好;在標題中放置多餘的標籤不會幫助您解答問題。你可以漂亮,請不要這樣做?爲了我? – Will

+0

好吧沒有意識到。感謝您的建議 – Firedragon

回答

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; 
    } 
} 
+0

這看起來非常像我在找的東西。我曾閱讀關於消息傳遞的知識,但這樣的例子總是有用的。發現提高屬性更改也可能發送對象與舊的和當前的值,例如'RaisePropertyChanged(「StringOne」,oldValue,值,真);'也可能證明對我有用。希望以這種方式發送數據不是太密集 – Firedragon

+0

我認爲你不應該過度發佈和訂閱,我從來沒有任何性能問題,但我儘量保持它低,特別是在Windows手機應用程序。當你使用這個消息時,確保你在正確的時間創建視圖模型,否則你的消息不會到達。 –

+0

我的目標是在WP7中設法遵循最佳實踐。如果一個過程不能正常工作,那麼我可以研究替代方案。感謝您的建議。 – Firedragon