域模型集合(通常是List或IEnumerable)是委託到ViewModel。WPF/MVVM:將域模型集合委託給ViewModel
這意味着我的CustomerViewModel有一個List或IEnumerable類型的訂單集合。
綁定控件無法識別列表中的變化。但與ObservableCollection是。
這是MVVM設計模式中的問題。
你如何應對?
UPDATE:我是怎麼做的樣品:
public class SchoolclassViewModel : ViewModelBase
{
private Schoolclass _schoolclass;
private ObservableCollection<PupilViewModel> _pupils = new ObservableCollection<PupilViewModel>();
public SchoolclassViewModel(Schoolclass schoolclass)
{
_schoolclass = schoolclass;
_schoolclass.Pupils = new List<Pupil>();
foreach (var p in schoolclass.Pupils)
Pupils.Add(new PupilViewModel(p));
}
public Schoolclass GetSchoolclass
{
get { return _schoolclass; }
}
public int ID { get; set; }
public string SchoolclassName
{
get { return _schoolclass.SchoolclassName;}
set
{
if(_schoolclass.SchoolclassName != value)
{
_schoolclass.SchoolclassName = value;
this.RaisePropertyChanged("SchoolclassName");
}
}
}
public ObservableCollection<PupilViewModel> Pupils
{
get{ return _pupils;}
set
{
_pupils = value;
this.RaisePropertyChanged("Pupils");
}
}
}
這是MVVM設計模式的問題嗎?列表中的更改僅在可觀察集合時才被識別。這是所有的編程,而不僅僅是MVVM。 – 2010-05-25 17:34:17
這不是一個普遍問題,因爲只有在MVVM設計模式下,才能將模型委託給視圖模型。 域模型/集合必須獨立於ViewModel需求開發,這些需求在數據綁定中具有ObservableCollection用於更改通知。 它關於ViewModel(通知何時集合更改什麼是UI需求)和Model(根本沒有更改通知,因爲該模型未綁定到View!)之間的關注分離 – msfanboy 2010-05-25 18:10:05
您可以將ObservableCollection作爲IEnumerable ,並且只要基礎類型是ObservableCollection 綁定仍然按預期工作,對不對? (我認爲這是對的,但我現在不記得)。 –
ckramer
2010-05-25 19:51:58