模型列表<T>和ViewModel ObservableCollection <T>重复数据?

rya*_*and 9 c# wpf list observablecollection mvvm

List<T>在业务层中拥有需要在UI上显示的最佳实践是什么?我目前ObservableCollection<T>在viewmodel中使用数据绑定来复制数据List<T>.显而易见的问题List<T>是,在业务层中修改ObservableCollection<T>需要重新创建的内容,以便List<T>在UI中反映更改.这不是最好的方法.

我也不会接受ObservableCollection<T>在业务层中使用an 作为答案.

谢谢!

Ath*_*ari 7

  1. 如果您坚持要通过List<T>单独的事件来通知列表修改,那么复制是唯一明智的方法.

    1. 如果您的ListChanged事件没有实际更改内容的详细信息,则可以避免重复,只需将列表包装在代理集合实现INotifyCollectionChanged界面中,该界面将以模式触发相应的CollectionChanged事件NotifyCollectionChangedAction.Reset.

    2. 如果你有颗粒状ItemChanged,ItemAdded等事件,那么你有效的复制ObservableCollection<T>功能.在这种情况下,您可以将应用程序包装在代理集合实现INotifyCollectionChanged界面中,但它可以理解您的体系结构并将事件转换为适当的NotifyCollectionChangedAction.

  2. 拥有ObservableCollection<T>业务层并不是一个坏主意.它是一个专门的集合,提供通知接口来通知项目更改,而不是专门为WinForms或WPF或其他任何设计的类.

  • 谢谢,我想我有一个先入为主的观念,即除非直接处理 UI,否则使用 ObservableCollection 是不好的。使用 ObservableCollection 时在可扩展性方面是否有任何明显的缺陷? (2认同)
  • @Rydel请参阅问题[WPF MVVM应用程序服务层中的ObservableCollection](http://stackoverflow.com/questions/13839097/observablecollection-in-the-service-layer-of-the-wpf-mvvm-application) ,它有高质量的答案. (2认同)