【发布时间】:2010-06-30 02:02:53
【问题描述】:
我为这部小说道歉,但我想解释到目前为止我所做的一切。
在我当前的项目中,我有一个使用服务的应用程序,该服务以<List> 的形式提供集合。由于我在应用程序中使用这些数据的方式,我不得不将这些数据转换为可观察的集合。这样做是为了在选择和移动数据时使用 INotifyPropertyChanged 和 INotifyCollectionChanged 刷新应用程序 UI 更新。
我现在面临的挑战是我有一个列表框,它绑定到列表框中的可观察集合我有一个数据模板,它呈现出集合的项目。此数据模板包含一个按钮,该按钮需要允许用户单击每个项目的按钮以将其从集合中删除。 用例是一个列表框,用于存储从网格视图中选择的名称。一旦用户从 gridview 中选择了名称,它们就会被存储(在可观察集合中作为队列)并在 UI 中呈现在一个列表框控件中,该控件显示所有选定的名称。我需要为用户提供以任何选择的顺序删除这些名称的能力。
从我一直在阅读的内容来看,没有办法枚举/索引可观察的集合。对于这种情况,您应该使用 List 或 Array。然而,为了让项目在列表视图中刷新,它们需要位于可观察集合中。 从我读过的内容来看,当事件被触发时,我需要将可观察集合转换为数组,然后评估数组以确定索引,然后相应地删除记录?
我想我可能会偏离这个基础,因为我似乎过度设计了这个问题?上述情况似乎不正确是因为我跌倒了,好像我正在做很多与收藏品之间的转换来删除一条记录? 当集合呈现为列表框中的项目控件时,有谁知道从集合中删除记录的有效方法(以任何选择的顺序)? 我已经成功地使用 RemoveAt() 删除了添加到集合中的最后一条记录,但是我在随机删除记录方面没有任何成功。
事后思考:这个问题的一部分可能与我在数据模板(控制项)中插入了一个按钮有关,因此在事件发生之前该项目实际上没有被选中触发按钮事件? 很抱歉对此漫无边际,但我已经为此思考了几个小时并取得了微小的进展。任何提示或想法将不胜感激!
【问题讨论】:
-
这个问题太啰嗦了。如果你能减少一个实际的问题,你会做到公正。仅供参考,我不知道你在哪里读到你不能索引或枚举 ObservableCollection。当然可以,它拥有所有的
ICollection<T>方法(IndexOf、Item 索引器等)。 -
感谢亚当,对这部长篇小说感到抱歉。我试图提出一个过于描述性的问题,但结果却更加简洁。再次感谢有关 ICollection 的提示
标签: wpf collections observablecollection