我尝试在按钮单击处理程序中添加以下内容:
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