有没有一个功能可以在列表视图的顶部移动项目



我有一个ListView,ItemSource绑定到ObservableCollection。此集合存储一些用户的聊天消息的列表。现在,每当用户收到新的聊天消息时,我想将该项目转移到顶部。WhatsApp和slack应用程序也是如此。所以我想知道做这件事的正确方法是什么。现在我正在从列表中删除一个项目,然后将其添加到第0个索引,但这样有时我会遇到参数不正确的问题。那么,有没有什么方法可以让我直接将任何聊天转移到顶部而不删除它。

列表视图的Xaml代码如下:

<ListView MaxHeight="{x:Bind ViewModel.OpenedChatMaxHeight, Mode=OneWay}"
Margin="0,10,0,0"
CanDragItems="True"
Loaded="{x:Bind ViewModel.OpenedChatDataLoaded}"
ScrollViewer.VerticalScrollBarVisibility="Hidden"                                  
SelectedIndex="{x:Bind ViewModel.OpenChatListSeletedItem,Mode=TwoWay}"
ItemsSource="{x:Bind ViewModel.OpenChatList,Mode=TwoWay}"
SelectionChanged="{x:Bind ViewModel.ChatSelected}"
IsItemClickEnabled="True"
ItemClick="{x:Bind ViewModel.OpenPinnedChatListItemClick}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel ItemsUpdatingScrollMode="KeepItemsInView" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>

ObservableCollection<T>类有一个Move方法,可以用来将项目从一个索引移动到另一个索引:

OpenedChatMaxHeight.Move(oldIndex, 0);

这比手动删除索引0处的项目并将其添加回索引0更方便。

我尝试过Move方法,但在这种情况下,我总是得到索引超出范围的错误——我的视图只是失去了焦点。

Move方法将指定索引处的项移动到集合中的新位置。请添加调试点以检查oldIndex是否正确。上面的问题看起来你们并没有得到正确的oldindex。

是否有在列表视图中移动顶部项目的功能

为了修复顶部的图表项,我们通常会制作一个单独的顶部列表。如果要修复图表项,可以将其从上一个图表列表中删除,然后将其添加到顶部列表中。

通过这种方式,可以很容易地创建istop样式,但不需要为上一个列表创建datatemplete选择器。您还可以将istop图表项存储在本地存储中,以提高渲染性能。

最新更新