2017-06-15 64 views
0

我有一個名爲pendingData的類,它有一個對象列表,它用應用程序的開始實例化,只要應用程序運行就會保留。但我必須將添加對象更改爲列表。如何在不通過構造函數中的對象的情況下訪問其他視圖中的對象?我們可以廣播一個對象來接收其他類

那麼,有沒有廣播方法或任何方式來做到這一點?

And pendingData類只實例化一次。

+0

是的,這是非常可能的。看看這個鏈接:https://stackoverflow.com/questions/16993918/mvvm-light-messenger-sending-and-registering-objects –

+0

這是正確的,你可以使用Messenger,但如果你只想訪問這個對象沒有事件使用Singleton,它更簡單。 –

+0

好吧,知道了謝謝 – kirito70

回答

1

要確保你只能得到你的對象的一個​​實例,你可以使用singleton模式這樣

public class Singleton 
{ 
    private static Singleton instance; 

    private Singleton() {} 

    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new Singleton(); 
     } 
     return instance; 
     } 
    } 
} 

你會注意到構造函數是私有,所以你必須通過Instance方法獲取實例。您還會注意到該方法只會創建該對象的一個​​實例(如果該實例不存在)。

您可以對所有視圖使用相同的Singleton對象,因爲它知道它將是同一個對象,因此它們是相同的數據。

或者,您可以將其聲明在中央位置,也許是您的主窗口的viewmodel,然後其他所有內容都可以從此處訪問它。

至於更新它,您可以將對象的引用傳遞到每個使用它的位置,然後直接更新它。或者你可以做events這樣的事情

在您的視圖的視圖模型

public static event EventHandler MyEvent; 

private void OnMyEvent() 
{ 
    if (MyEvent != null) 
    { 
     MyEvent(this, new EventArgs()); 
    } 
} 

在位置在您的數據對象,也許你的主窗口中的視圖模型

MyView.MyEvent += delegate 
{ 
    // Update your data 
}; 

如果你可以」 t打開多個視圖並且/或者不希望您的視圖在打開時響應數據更改,則這可能就足夠了。但是,如果您希望視圖實時響應數據,則可以使用事件做一些事情,以便一個視圖可以告訴另一個視圖數據已更改並且需要更新。

+0

因爲我必須在其他視圖中更新** Pending Items List **,所以我必須製作事件並調用它們以** Pending Items List **告訴視圖該對象已更新。爲此,我將使用MVVM Messenger作爲@Naresh在上面的評論中共享一個線程? – kirito70

+0

你可以,但你不必。有或沒有它是可能的。要做到這一點,你會沿着MVVM Light路線走。在你做這個之前,我建議你看看MVVM Light - http://www.mvvmlight.net/,看看它爲你的項目增加了什麼額外的好處/成本。 – Gareth