我剛剛開始使用MVVM,並且遇到了一個障礙,希望有人能幫助我。我正在嘗試用2個列表框創建一個簡單的視圖。第一個列表框中的選擇將填充第二個列表框。我創建了一個類來存儲我想要綁定的信息。ObservableCollection不更新查看
爲MyObject類(可觀察對象只是一個基類實現INotifyPopertyChanged)
public class MyObject : ObservableObject
{
String _name = String.Empty;
ObservableCollection<MyObject> _subcategories;
public ObservableCollection<MyObject> SubCategories
{
get { return _subcategories; }
set
{
_subcategories = value;
RaisePropertyChanged("SubCategories");
}
}
public String Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
public MyObject()
{
_subcategories = new ObservableCollection<EMSMenuItem>();
}
}
在我的ViewModel我有兩個ObservableCollections創建
public ObservableCollection<EMSMenuItem> Level1MenuItems { get; set; }
public ObservableCollection<EMSMenuItem> Level2MenuItems { get; set; }
在我的視圖模型的構造,我有:
this.Level1MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level2MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level1MenuItems = LoadEMSMenuItems("Sample.Xml");
對於Level1項目可以正常工作並在視圖中正確顯示。但是我有一個被調用,當用戶點擊一個項目在列表框中,它具有以下命令:
Level2MenuItems = ClickedItem.SubCategories;
出於某種原因,這並不更新第二列表框的UI。如果我在這個位置放置一個斷點,我可以看到Level2MenuItems中存儲了正確的信息。如果我編寫一個foreach循環並將它們單獨添加到Level2MenuItems集合中,那麼它將正確顯示。
另外,作爲一個測試,我添加了下面的構造器:
Level2MenuItems = Level1MenuItems[0].SubCategories;
這正確更新。
那麼,爲什麼代碼在構造函數中按預期方式工作,或者在循環時運行,而不是當用戶單擊列表框中的某個項時?
感謝。正是我需要的。 – 2011-12-18 23:53:37