是否有将项目移至列表视图顶部的功能

时间:2021-07-06 06:05:41

标签: c# uwp

我有一个 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>

2 个答案:

答案 0 :(得分:1)

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

OpenedChatMaxHeight.Move(oldIndex, 0);

这比在索引 0 处手动删除和添加项目更方便。

答案 1 :(得分:0)

<块引用>

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

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

<块引用>

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

为了固定顶部的图表项,我们经常制作单独的顶部列表。当您想要修复图表项时,您可以将其从之前的图表列表中移除,并将其添加到顶部列表中。

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

相关问题