添加数据后如何滚动到 ListView 的末尾 - WPF

Buc*_*uck 2 c# wpf listview command event-handling

我尝试在按钮单击处理程序中添加以下内容:

        ListView listView = MyListView;
        int lastItemIndex = listView.Items.Count - 1;
        listView.ScrollIntoView(listView.Items[lastItemIndex]);
        listView.UpdateLayout();
Run Code Online (Sandbox Code Playgroud)

按钮单击还与命令处理程序相关联,该命令处理程序将项目添加到与 ListView 关联的 ObservableCollection。

问题是按钮单击处理程序在我的命令处理程序之前调用,因此为时过早。在按钮单击处理程序中,ListView 还没有看到带有添加项的更新 ObservableCollection。什么事件或者更好的是,在我的项目添加到 ObservableCollection 后,如果不更改背后的代码以使 ListView 滚动到末尾,我可以做什么?我已经看过但在stackoverflow中还没有找到答案。谢谢!

Roh*_*ats 5

如果ItemSource 是 ObservableCollection,则可以在 Window/UserControl 构造函数中挂钩CollectionChanged事件,并在将项目添加到集合中时将最后一个项目滚动到视图中

假设您的基础类是TesClass,您将这样做:

((INotifyCollectionChanged)listView.ItemsSource).CollectionChanged +=
     (s, e) =>
     {
         if (e.Action == 
             System.Collections.Specialized.NotifyCollectionChangedAction.Add)
         {
             listView.ScrollIntoView(listView.Items[listView.Items.Count - 1]);
         }
     };
Run Code Online (Sandbox Code Playgroud)