1

我正在使用ListCollectionView对象来显示项目列表。目前,我正在构建一个包含其中两个列表的屏幕 - 一个,completeList,包含所有可用项目,另一个,sortedList,包含其中的一个子集,并且项目顺序相关。这里可能采取的行动是

  • 添加或删除任何completeList项目到/从sortedList
  • 向上或向下移动项目sortedList
  • 保存的内容sortedList

现在,我的问题是:是否有可能将项目插入到sortedList定义的位置?

现在,无论当前标记的项目如何,它们都将始终添加到列表的末尾,而且我没有找到解决方法 - 除了明显的肮脏黑客之外,这将使我在需要之后存储所有项目位置,从列表中删除它们,添加新项目,然后以正确的顺序重新添加所有存储的项目。

ListCollectionView 是否提供任何此类功能,或者是否有另一个 CollectionView 类可以解决问题?

4

1 回答 1

2

你实际上是在要求一些逻辑矛盾的东西。假设我ListCollectionView按字母顺序排序:

American
Continental
Festival
Imperial
Tower
Worldwide

我应该能够在andLuxor之间插入吗?如果视图已排序,则不会。那个物品只能去一个地方。它出现在视图中的位置与它可能出现在基础列表中的位置无关。AmericanContinental

如果不了解您的应用程序的更多信息,就很难确切知道该建议什么。但是,如果对集合视图进行排序,则使项目出现在视图中特定位置的方法是为其排序键分配一个值,该值将在刷新视图后使其出现在所需位置.

执行此操作的一种相当简单(和通用)的方法是向DateTime数据项类添加一个属性,DateTime.Now在项的构造函数中将其设置为,并使其成为视图使用的最后一个排序键。然后,在添加新项目时,将其其他排序键属性设置为当前选定项目的值。如果您这样做,新项目将始终出现在适当的位置,只要您不更改任何排序键属性的值。

话虽如此,从您想要支持的其他功能来看,我相信您根本不应该将 aListCollectionView用于您所调用的内容sortedList。此列表未排序。它是有序的,这根本不是一回事。当用户在列表中向上移动一个项目时,您实际上想要更改它的位置。

您可能想要做的是将列表实现为,并将其包装在公开、、、、和属性ObservableCollection的视图模型类中。然后,您可以将a or的和属性绑定到类中的和属性,并将 UI 中的按钮或超链接或其他任何内容绑定到命令。这些命令将使用and来操作属性,并且由于是,因此 UI 将保持同步。ItemsSelectedItemAddNewCommandMoveUpCommandMoveDownCommandSaveCommandItemsSourceSelectedItemListBoxListViewItemsSelectedItemItemsRemoveInsertItemsObservableCollection

于 2011-07-18T18:33:39.947 回答