抱歉,我写了一篇小说,但我想解释一下目前为止我所做的事情。
在我的当前项目中,我有一个应用程序,它消费提供<List>
集合的服务。由于我在应用程序中使用数据的方式,我不得不将这些数据转换为可观察的集合。这样做是为了当数据被选择并在应用程序 UI 中移动时,使用INotifyPropertyChanged和INotifyCollectionChanged更新UI。
现在我面临的挑战是,我有一个绑定到可观察集合的列表框(listbox),在列表框内,我有一个数据模板,用于渲染集合的项。这个数据模板包含一个按钮,允许用户单击按钮以删除集合中的每个项目。此用例是存储在网格视图中选择的名称的列表框。一旦用户从网格视图中选择名称,它们将被存储(在可观察集合中作为队列)并在UI中呈现在列表框控件中,显示所有已选择的名称。我需要为用户提供按任意顺序选择删除这些名称的能力。
从我所了解的来看,在可观察集合中没有枚举/索引的方法。对于这种情况,您应该使用List或Array。但是,为了使项目在列表视图中刷新,它们需要在可观察集合中。
根据我所读的,似乎当事件被触发时,我需要将可观察集合转换为数组,然后评估数组以确定索引,然后相应地删除记录?
我认为我可能偏离了正道,因为似乎我正在对这个问题进行过度设计?上述情况似乎不正确,因为我觉得我在不停地将集合转换来转换去,只是为了删除一条记录?是否有人知道以任意顺序从集合中高效地删除记录(当集合作为列表框中的项控件呈现时)的方法?我已成功使用RemoveAt()删除了添加到集合中的最后一条记录,但是我在随机删除记录方面没有取得任何成功。
事后想法:这个问题的一部分可能与事实有关,即我在数据模板(控件项)中插入了一个按钮,因此在按钮事件触发之前,该项实际上并未被选择?对于这个问题,我很抱歉,因为我花了数小时才解决,并取得了一些进展。如果您有任何提示或想法,将不胜感激!
ICollection<T>
方法(IndexOf、Item索引器等)。 - Adam Sills