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

标签 c# wpf list mvvm observablecollection

拥有 List<T> 的最佳实践是什么?需要在UI上展示的业务层?我目前将数据绑定(bind)与 ObservableCollection<T> 一起使用在复制 List<T> 数据的 View 模型中.明显的问题是当 List<T>在业务层修改ObservableCollection<T>需要重新创建,因此 List<T> 的更改反射(reflect)在用户界面中。这不是最好的方法。

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

谢谢!

最佳答案

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

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

    2. 如果您有粒度 ItemChanged , ItemAdded等事件,那么你实际上是在复制 ObservableCollection<T>功能。在这种情况下,您可以将您的应用程序包装在一个实现 INotifyCollectionChanged 的代理集合中。接口(interface),但它了解您的体系结构并将事件转换为适当的 NotifyCollectionChangedAction .

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

关于c# - 模型列表<T> 和 ViewModel ObservableCollection<T> 重复数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202275/

相关文章:

c# - 如何在运行时更改元素样式?

list - List monad 在这个例子中是如何工作的?

python - 按多个条件对列表进行排序并附加

c# - ASP.Net可以连接到MySQL服务器,但我无法拉回数据?

c# - 有什么办法可以关闭邮件 smtp session 吗?

c# - MVC3 局部 View 和模型不回发更改

c# - Web 浏览器控件 : how to suppress message: do you want to close this window

c# - WPF 将 Window 模板中的按钮绑定(bind)到 ViewModel 的命令

wpf - 如何使用 MSI 部署 WPF 应用程序

python - 如何在包含相同元素的另一个列表中找到一个列表的元素索引?