我有一個名爲pendingData的類,它有一個對象列表,它用應用程序的開始實例化,只要應用程序運行就會保留。但我必須將添加對象更改爲列表。如何在不通過構造函數中的對象的情況下訪問其他視圖中的對象?我們可以廣播一個對象來接收其他類
那麼,有沒有廣播方法或任何方式來做到這一點?
And pendingData類只實例化一次。
我有一個名爲pendingData的類,它有一個對象列表,它用應用程序的開始實例化,只要應用程序運行就會保留。但我必須將添加對象更改爲列表。如何在不通過構造函數中的對象的情況下訪問其他視圖中的對象?我們可以廣播一個對象來接收其他類
那麼,有沒有廣播方法或任何方式來做到這一點?
And pendingData類只實例化一次。
要確保你只能得到你的對象的一個實例,你可以使用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打開多個視圖並且/或者不希望您的視圖在打開時響應數據更改,則這可能就足夠了。但是,如果您希望視圖實時響應數據,則可以使用事件做一些事情,以便一個視圖可以告訴另一個視圖數據已更改並且需要更新。
是的,這是非常可能的。看看這個鏈接:https://stackoverflow.com/questions/16993918/mvvm-light-messenger-sending-and-registering-objects –
這是正確的,你可以使用Messenger,但如果你只想訪問這個對象沒有事件使用Singleton,它更簡單。 –
好吧,知道了謝謝 – kirito70