添加数据后,如何滚动到listView的结束-WPF



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

        ListView listView = MyListView;
        int lastItemIndex = listView.Items.Count - 1;
        listView.ScrollIntoView(listView.Items[lastItemIndex]);
        listView.UpdateLayout();

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

问题是在我的命令处理程序之前调用按钮点击处理程序,因此还为时过早。在"按钮"点击处理程序中,ListView尚未看到带有添加项目的更新的ObservableCollection。什么事件或更好的是,在将我的项目添加到ObservableCollection之后,我该怎么办才能使ListView在后面的代码中滚动到末尾?我看过,但是在Stackoverflow中什么都没有找到答案。谢谢!

如果您的 itemsource是ObservableCollection ,您可以在窗口/USERCONTROL构造函数和 scroll最后一项中挂钩 Collection Changed Changed 事件每当将项目添加到集合中

时到查看

假设您的基础类是 tesclass ,这就是您的方式:

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

尝试此

VirtualizingStackPanel vsp = (VirtualizingStackPanel)typeof(ItemsControl).InvokeMember("_itemsHost", BindingFlags.Instance | BindingFlags.GetField | BindingFlags.NonPublic, null, _listView, null);
double scrollHeight = vsp.ScrollOwner.ScrollableHeight;
double offset = scrollHeight * lastItemIndex // itemIndex_ is index of the item which we want to show in the middle of the view
vsp.SetVerticalOffset(offset);

virtualizingstackpanel

相关内容

  • 没有找到相关文章

最新更新