2010-06-30 233 views
2

我为小说道歉,但我想尽可能多地解释到目前为止所做的。如何从Observable Collection中移除项目

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

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

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

我想我可能是基于此,因为它好像我在过度工程这个问题?上述情况似乎并不正确,因为我倒下了,好像我正在做很多转换和从集合到删除记录? 当集合作为列表框中的项目控件呈现出来时,是否有人知道从集合中删除记录(以任何选定的顺序)的有效方法? 我已经成功移除使用RemoveAt()添加到集合中的最后一条记录,但是我没有在随机移除记录方面取得任何成功。

有感:这个问题部分可能与这样的事实,我有DataTemplate中(控制项)中插入一个按钮,因此之前的事件上的按钮发射实际上没有被选中的项目事件? 对不起,我在这个问题上花了好几个小时,并取得了一些小进展。任何提示或想法将不胜感激!

+3

这个问题太漫长了。如果你能削减一个实际的问题,你会做到这一点。而且仅供参考,我不知道你在哪里阅读,你不能索引或枚举ObservableCollection。当然你可以,它具有所有'ICollection '方法(IndexOf,Item索引器等)。 – 2010-06-30 02:28:50

+0

感谢亚当,对于长篇小说对不起。我试图给出一个过于描述性的问题,并且出现了更简单的混淆。再次感谢ICollection的提示 – rlcrews 2010-06-30 14:53:16

回答

5

ObservableCollection<T>继承自Collection<T>它实现了IList<T>,所以你可以肯定地索引和枚举它。它有一个Remove方法,该方法使对象删除并删除集合中的第一个匹配项,并删除索引并删除该索引项的方法。

基于你的事后,听起来像你有一个WPF ListBox和一个ItemTemplate创建一个按钮。 ListBox会将每个实例化模板的DataContext设置为绑定到列表中的项目,因此您可以从Button上的DataContext属性或通过使用绑定来获取对创建Button的项目的引用。

+0

谢谢Quarermeister。经过一些额外的研究后,我回去重新模板并从模板中移除按钮。这使我可以从控件中使用SelectedItem,并将按钮移动到列表下面。虽然在视觉上有点不同。它没有问题。谢谢你的提示。 – rlcrews 2010-06-30 14:55:30