这是问题: 如果我的模型是其他模型对象的集合,可能都会通过某些计算进行更改,那么最好不要在每个模型项目中使用PropertyChanged而是在父级别使用PropertyChanged吗?
假设我在WPF中有我的MVVM:
型号:
public class Model
{
public IEnumerable<IItemModel> Items{ get;}
}
public class IItemModel : INotifyPropertyChanged
{
private int m_value;
public int Value{
get{ return m_value; }
set{
m_value = value;
NotifyPropertyChanged(()=>Value);
}
}
}
在ViewModel中
// BaseViewModel implements INotifyPropertyChanged etc
public class MyViewModel: BaseViewModel
{
public MyViewModel(){
var items = new Model.Items
Items = new MyObservableColelction<ItemViewModel>(item => new ItemsViewModel(item), items);
}
public MyObservableCollection<ItemViewModel> Items { get ; set; }
}
这里,MyObservableColelction是IObservableCollection的一些实现,它的工厂函数作为Action传递,它接受IItemModel并创建和添加ItemViewModel。
最后,视图(Xaml)绑定到Items属性,这在这里并不重要。
从MVVM和架构来看,这很好。但是我考虑性能,假设IItemModel :: Value是计算属性,并且计算了模型中的所有项目,是否更好地设置每个项目更改的属性并且可能在Model类中更改了一个单独的属性? 它将减少触发PropertyChanged的数量,在某些情况下,我有1000个。
它是否有意义,它有多少优化?
答案 0 :(得分:0)
绑定到视图模型中的模型对象的视图违反了MVVM可以为您提供的关注分离方面。您的视图将取决于视图模型中使用的模型。
除非您遇到非常特殊的情况,否则导致问题的财产数量变化的可能性相当小。即使在这种情况下,根本原因也可能是解决方案中的错误方法而不是属性更改机制。
WPF / Windows是一个事件驱动的系统,它可以毫无问题地处理许多事件。如果我是你,我会尽可能地坚持这个模式。