我正在使用 ListCollectionView 对象来显示项目列表。目前,我正在构建一个屏幕,其中有两个列表 - 一个completeList
,包含所有可用项目,另一个sortedList
,包含项目顺序的子集相关。这里可能采取的行动是
completeList
sortedList
项
sortedList
sortedList
。现在,我的问题是:是否有可能在定义的位置将项目插入sortedList
?
现在,它们将始终添加到列表的末尾,无论当前标记的项目如何,我没有找到解决方法 - 除了明显的脏黑客,这将让我存储所有项目在所需位置后,从列表中删除它们,添加新项目,然后以正确的顺序重新添加所有存储的项目。
ListCollectionView是否提供任何此类功能,或者是否有另一个可以实现此功能的CollectionView类?
答案 0 :(得分:2)
你实际上是在寻找一些合乎逻辑的矛盾。假设我按字母顺序排序ListCollectionView
:
American
Continental
Festival
Imperial
Tower
Worldwide
我应该能够在Luxor
和American
之间插入Continental
吗?如果视图已排序,则不会。项目只有一个地方可以去。它出现在视图中的位置与它在底层列表中的显示位置无关。
如果不了解您的应用程序,很难确切地知道建议的内容。但是,如果对集合视图进行排序,则使项目显示在视图中的特定位置的方法是为其排序键分配一个值,一旦刷新视图,该值将使其出现在所需位置。
这样做的一个相当简单(和通用)的方法是向数据项类添加DateTime
属性,在项目的构造函数中将其设置为DateTime.Now
,并使其成为最后一个排序键视图使用的。然后,在添加新项目时,将其他排序键属性设置为当前所选项目的值。如果这样做,只要您不更改任何排序键属性的值,新项目将始终显示在适当的位置。
话虽如此,根据您想要支持的其他功能,我相信您不应该使用ListCollectionView
来处理您所称的sortedList
。此列表未排序。它是有序的,这完全不是一回事。当用户在列表中向上移动项目时,您实际上想要更改其位置。
您可能要做的是将列表实现为ObservableCollection
,并将其包装在公开Items
,SelectedItem
,AddNewCommand
,{的视图模型类中{1}},MoveUpCommand
和MoveDownCommand
属性。然后,您可以将类SaveCommand
或ItemsSource
的{{1}}和SelectedItem
属性绑定到ListBox
和ListView
属性,并绑定按钮或UI中的超链接或其他任何命令。这些命令将使用Items
和SelectedItem
来操纵Items
属性,并且由于Remove
是Insert
,因此用户界面将保持同步。