在实现WPF中的第一个MVVM应用程序时,我一直在思考将Model集合包装在相关的ViewModel集合中以在View中使用的利弊。
在我们的系统中,我们可能会有几个潜在的大型集合,例如订单中的订单行和可以选择订单行的库存项目。目前,在数据访问层中从SQL中查找这些内容,然后循环遍历SqlDataReaders以创建Model对象集合。
然后,在创建ViewModel对象集合时循环遍历Model对象集合似乎是不必要的开销。当存在大量Model对象集合时,直接在View上公开这些对象是否更好呢?
感谢您的帮助,马克。
编辑 在阅读这个主题时,我找到了今年7月的MSDN文章(由Josh Smith审查),它给出了MVVM的相当平衡的观点,在“集合”部分中说道:
在我们的系统中,我们可能会有几个潜在的大型集合,例如订单中的订单行和可以选择订单行的库存项目。目前,在数据访问层中从SQL中查找这些内容,然后循环遍历SqlDataReaders以创建Model对象集合。
然后,在创建ViewModel对象集合时循环遍历Model对象集合似乎是不必要的开销。当存在大量Model对象集合时,直接在View上公开这些对象是否更好呢?
感谢您的帮助,马克。
编辑 在阅读这个主题时,我找到了今年7月的MSDN文章(由Josh Smith审查),它给出了MVVM的相当平衡的观点,在“集合”部分中说道:
非常感谢到目前为止的评论,尝试限制传递到ViewModel中的数据量或使用分页或其他适当的控件肯定会减少问题,但我想知道是否仍然有情况下最好只是将绑定到ViewModel内的Model对象集合?请注意保留HTML标记。集合的另一个问题是确定是否需要在ViewModel实例中包装集合中的每个模型实例。对于较小的集合,ViewModel可以公开一个新的可观察集合,并将底层模型集合中的所有内容复制到ViewModel可观察集合中,同时将集合中的每个模型项目包装在相应的ViewModel实例中。ViewModel可能需要侦听集合更改事件,以将用户更改传输回底层模型。
但是,对于将以某种形式的虚拟化面板公开的非常大的集合,最简单和最实用的方法就是直接公开模型对象。