gpt4 book ai didi

c# - 复合 View 模型传播更改通知

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:48 24 4
gpt4 key购买 nike

我有一个名为 OperatingViewModel 的 View 模型,其中包含对 LevelAListViewModel 的引用。每个级别 View 模型都代表底层模型中的层次结构。我的问题是,通知 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");
}
}
}

最佳答案

四种最常见的做法是:

  1. 监听 child 的 PropertyChanged 事件
  2. 将引用传递给父级,然后调用父级的方法
  3. 将 lambda 传递给调用父级方法的子级
  4. 使用松散耦合的 EventAggregator 在父级订阅的子级中发布 PropertyChanged 事件。有关示例,请参阅 Prism 的 EventAggregator。

我通常会选择 1 或 3,始终牢记这两者都可能因强引用而导致内存泄漏。如果父级实际上引用了子级,则 4 有点矫枉过正。

关于c# - 复合 View 模型传播更改通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10711873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com