如何从Observable Collection中删除项目

时间:2010-06-30 02:02:53

标签: wpf collections observablecollection

我为这部小说道歉,但我想解释我到目前为止所做的事情。

在我当前的项目中,我有一个应用程序,它使用一个提供<List>集合的服务。由于我在应用程序中使用此数据的方式,我不得不将此数据转换为可观察的集合。这样做是为了在选择和移动应用程序UI时,使用INotifyPropertyChanged和INotifyCollectionChanged刷新更新。

我现在遇到的挑战是我有一个列表框,它与列表框中的可观察集合绑定我有一个数据窗口,用于呈现集合的项目。此数据模板包含一个按钮,该按钮需要允许用户单击每个项目的按钮以将其从集合中删除。 用例是一个列表框,用于存储从gridview中选择的所选名称。一旦用户从gridview中选择了名称,它们就会被存储(在可观察集合中作为队列),并在显示所有选定名称的列表框控件中在UI中呈现。我需要为用户提供以所选的任何顺序删除这些名称的功能。

从我读过的内容来看,没有办法枚举/索引一个可观察的集合。对于这种情况,您应该使用List或Array。但是,为了在列表视图中刷新项目,它们需要位于Observable Collection中。 从我所看到的内容看来,当事件被触发时,我需要将可观察集合转换为数组,然后评估数组以确定索引,然后相应地删除记录?

我想我可能会因为看起来我过度设计这个问题了?上面的场景看起来不正确是因为我摔倒了好像我正在进行大量的转换和收集来删除记录? 当集合作为列表框中的项目控件呈现时,有没有人知道从集合中删除记录(以任何顺序选择)的有效方法? 我已成功删除使用RemoveAt()添加到集合中的最后一条记录但是我没有成功随机删除记录。

事后补充:这个问题的一部分可能与我在datatemplate(控制项)中插入一个按钮这一事实有关,因此在事件发生之前实际上没有选择该项点击按钮事件? 很抱歉这是漫无目的,但我已经在这里呆了好几个小时并且取得了一些进展。任何提示或想法将不胜感激!

1 个答案:

答案 0 :(得分:5)

ObservableCollection<T>继承自实现Collection<T>IList<T>,因此您当然可以对其进行索引和枚举。它有一个Remove方法,它使对象删除并删除集合中的第一个匹配项,以及一个RemoveAt方法,该方法接受索引并删除该索引处的项目。

根据你的事后想法,听起来你有一个带有ItemTemplate的WPF ListBox可以创建一个Button。 ListBox将每个实例化模板的DataContext设置为绑定到的列表中的项目,因此您可以从Button上的DataContext属性或使用Binding获取对创建Button的项的引用。