ViewModel应该响应每个ProperyChanged事件还是更好的分块?

时间:2014-03-06 09:07:49

标签: wpf mvvm

这是问题: 如果我的模型是其他模型对象的集合,可能都会通过某些计算进行更改,那么最好不要在每个模型项目中使用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个。

它是否有意义,它有多少优化?

1 个答案:

答案 0 :(得分:0)

绑定到视图模型中的模型对象的视图违反了MVVM可以为您提供的关注分离方面。您的视图将取决于视图模型中使用的模型。

除非您遇到非常特殊的情况,否则导致问题的财产数量变化的可能性相当小。即使在这种情况下,根本原因也可能是解决方案中的错误方法而不是属性更改机制。

WPF / Windows是一个事件驱动的系统,它可以毫无问题地处理许多事件。如果我是你,我会尽可能地坚持这个模式。