![](/img/trans.png)
[英]Listening to dependency property changes on one viewmodel from another viewmodel
[英]Accessing a property in one ViewModel from another
我希望主視圖模型有一個特定的列表,然后從許多其他視圖模型訪問。
例如,在 MainViewModel.cs 中我將有一個 50 個數字的列表,然后在 NumListViewModel.cs 中,我想訪問它以便將其顯示為列表,並且在 AddNumViewModel.cs 中我希望能夠更新該列表。
有人建議我使用 events / evenaggerator,我這樣做了,但不幸的是,據我所知,我所能做的就是將一個 num 從一個視圖發送到另一個視圖並告訴它更新列表,但問題是,程序增長,我需要在主視圖模型中有很多訂閱者,當實際發生某些事情時,我將不得不根據訂閱者的數量“發布”事件,這使得維護變得更加困難。
我還找到了另一個答案,指示在 mainVM 中創建另一個 VM 的實例,參數設置為“this”,這是對 mainVM 的引用。 它有效,但話又說回來,它可能會變得很長。
所以我的問題是,有沒有更好的方法從另一個 VM 訪問屬性?
就像字面上有一個在 mainVM 中保存列表的類的實例,然后只需能夠從其他 VM 更新/訪問它,而無需顯式編程哪個 VM 可以。 會讓生活變得如此輕松。
在您的回答中,請盡量避免建議框架。 雖然有一些非常好的,但我希望至少能夠自己做到這一點。
例如:
MainVM.cs:
public class MainVM
{
List lst = new List(); //Let's just say it's full...
}
其他VM.cs:
public class OtherVM
{
lst.Add(3);
}
PS:是的,我知道它已經被問過了,是的,我已經進行了研究,但是我發現的答案太“靜態”了,我猜?
如果您想從外部 ViewModel直接訪問列表,那么您的選擇是:
將 List 作為構造函數參數或公共屬性傳遞給 OtherVM。 然后,OtherVM 可以將其視為成員。
將 MainVM 作為構造函數參數或公共屬性傳遞給 OtherVM。 然后OtherVM可以通過首先訪問MainVM來訪問List。
例子:
public class MainVM
{
public List<XX> MyList { get; set; }
}
public class OtherVM
{
public MainVM TheMainVM { get; set; }
public OtherVM(MainVM theMainVM)
{
TheMainVM = theMainVM;
// Access the MainVM's list
TheMainVM.MyList.Add(stuff);
}
}
例子:
public class MainVM
{
private static MainVM _instance = new MainVM();
public static MainVM Instance { get { return _instance; } }
public List<XX> MyList { get; set; }
//other stuff here
}
//From within OtherVM:
MainVM.Instance.MyList.Add(stuff);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.