Xamarin 我应该在何时触发事件以使我的listview滚动到底部
因此,在我的Xamarin.Forms项目中,我有一个listview,它应该像消息传递应用程序中的消息列表一样工作 在viewmodel的构造函数中,我启动了一个异步方法来加载消息,根据情况从服务器或缓存加载。问题是listview会滚动到列表的顶部,而不是应该滚动到的底部。我不能直接从Viewmodel中滚动,因为这样会将其与视图耦合 所以,我想,为什么不做一个事件,在消息更新完成后触发它呢。当消息在第一次之后更新时,此事件可以正常工作,但对于第一次加载,它不工作。从断点的自由使用中,我看到它确实启动了,但它似乎是在ListView完成渲染之前启动的,因此实际上并没有向下滚动Xamarin 我应该在何时触发事件以使我的listview滚动到底部,xamarin,xamarin.forms,Xamarin,Xamarin.forms,因此,在我的Xamarin.Forms项目中,我有一个listview,它应该像消息传递应用程序中的消息列表一样工作 在viewmodel的构造函数中,我启动了一个异步方法来加载消息,根据情况从服务器或缓存加载。问题是listview会滚动到列表的顶部,而不是应该滚动到的底部。我不能直接从Viewmodel中滚动,因为这样会将其与视图耦合 所以,我想,为什么不做一个事件,在消息更新完成后触发它呢。当消息在第一次之后更新时,此事件可以正常工作,但对于第一次加载,它不工作。从断点的自由使用中,我看到
是否有一些“已完成渲染”事件可以挂接?在ViewModel中是否有可以触发事件的位置,我知道渲染将完成?有没有更好的方法可以做到这一点?很难对异步内容进行计时,因此确实存在速度太快的问题。例如,当您的数据加载到ObvservableCollection中时,您可以订阅事件 您可以在视图的后台代码中绑定事件,基本上只需滚动到最后一项。通过这种方式,您可以确保按时完成此任务,而不必为启动自己的活动而烦恼 您需要更改集合。这对你有意义吗 因此,视图的隐藏代码中的代码如下所示:
_viewModel.Collection.CollectionChanged += delegate()
{
_listView.ScrollTo(_viewModel.Collection.Last(), ScrollToPosition.Start, false);
};
您可以在override OnAppearing()方法的末尾写入此项。此外,ListView有一个ItemExaming事件,您可以在视图中使用它,以防需要处理新消息。C。Yu是的,我试着连接到itemseapping事件,但是每当一个新的项目被滚动到视图中时,它似乎就会启动。是的,这似乎可以实现这个技巧,并且比我尝试的要简单得多。谢谢:D@Fireprufe15没问题!快乐编码