我有一个名为 OperatingViewModel 的视图模型,其中包含对 LevelAListViewModel 的引用。每个级别视图模型都表示底层模型中的层次结构。我的问题是,通知 OperatingViewModel 更改任何Level [*] ViewModel的最佳方法是什么?
我已经尝试在父级中收听 PropertyChanged 事件,这样做没问题,但看起来不太干净。
我也尝试将父项作为对子项的引用传递,然后调用一个方法,然后在链上调用它的父项,但同样,这看起来也很糟糕。
class OperatingViewModel : INotifyPropertyChanged
{
LevelAListViewModel LevelACollection { get; set; }
}
class LevelAListViewModel : INotifyPropertyChanged
{
LevelAList _model;
LevelBListViewModel LevelBListViewModel { get; set; }
}
class LevelAViewModel : INotifyPropertyChanged
{
LevelB _model;
LevelBListViewModel LevelBListViewModel { get; set; }
}
class LevelBListViewModel : INotifyPropertyChanged
{
LevelBList _model;
ObservableCollection<LevelBViewModel> LevelBCollection { get; set; }
}
class LevelBViewModel : INotifyPropertyChanged
{
LevelB _model;
LevelCListViewModel LevelCListViewModel { get; set; }
}
class LevelCListViewModel : INotifyPropertyChanged
{
LevelCList _model;
ObservableCollection<LevelCViewModel> LevelCCollection { get; set; }
}
class LevelCViewModel : INotifyPropertyChanged
{
LevelC _model;
LevelDListViewModel LevelDListViewModel { get; set; }
DateTime StartDate
{
get { return _model.StartDate }
set
{
_model.StartDate = value;
OnPropertyChanged("StartDate");
}
}
DateTime EndDate
{
get { return _model.EndDate }
set
{
_model.EndDate = value;
OnPropertyChanged("EndDate");
}
}
}
class LevelDListViewModel : INotifyPropertyChanged
{
LevelD _model;
ObservableCollection<LevelDViewModel> LevelDCollection { get; set; }
}
class LevelDViewModel : INotifyPropertyChanged
{
LevelD _model;
int Price
{
get { return _model.Price}
set
{
_model.Price = value;
OnPropertyChanged("Price");
}
}
}
答案 0 :(得分:2)
这四种最常见的方法是:
我通常会选择1或3,始终牢记由于强引用而导致内存泄漏的可能性。如果父母实际上提到了孩子,那么4就是矫枉过正。