Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin 我应该在何时触发事件以使我的listview滚动到底部_Xamarin_Xamarin.forms - Fatal编程技术网

Xamarin 我应该在何时触发事件以使我的listview滚动到底部

Xamarin 我应该在何时触发事件以使我的listview滚动到底部,xamarin,xamarin.forms,Xamarin,Xamarin.forms,因此,在我的Xamarin.Forms项目中,我有一个listview,它应该像消息传递应用程序中的消息列表一样工作 在viewmodel的构造函数中,我启动了一个异步方法来加载消息,根据情况从服务器或缓存加载。问题是listview会滚动到列表的顶部,而不是应该滚动到的底部。我不能直接从Viewmodel中滚动,因为这样会将其与视图耦合 所以,我想,为什么不做一个事件,在消息更新完成后触发它呢。当消息在第一次之后更新时,此事件可以正常工作,但对于第一次加载,它不工作。从断点的自由使用中,我看到

因此,在我的Xamarin.Forms项目中,我有一个listview,它应该像消息传递应用程序中的消息列表一样工作

在viewmodel的构造函数中,我启动了一个异步方法来加载消息,根据情况从服务器或缓存加载。问题是listview会滚动到列表的顶部,而不是应该滚动到的底部。我不能直接从Viewmodel中滚动,因为这样会将其与视图耦合

所以,我想,为什么不做一个事件,在消息更新完成后触发它呢。当消息在第一次之后更新时,此事件可以正常工作,但对于第一次加载,它不工作。从断点的自由使用中,我看到它确实启动了,但它似乎是在ListView完成渲染之前启动的,因此实际上并没有向下滚动


是否有一些“已完成渲染”事件可以挂接?在ViewModel中是否有可以触发事件的位置,我知道渲染将完成?有没有更好的方法可以做到这一点?

很难对异步内容进行计时,因此确实存在速度太快的问题。例如,当您的数据加载到ObvservableCollection中时,您可以订阅事件

您可以在视图的后台代码中绑定事件,基本上只需滚动到最后一项。通过这种方式,您可以确保按时完成此任务,而不必为启动自己的活动而烦恼

您需要更改集合。这对你有意义吗

因此,视图的隐藏代码中的代码如下所示:

_viewModel.Collection.CollectionChanged += delegate()
{
   _listView.ScrollTo(_viewModel.Collection.Last(), ScrollToPosition.Start, false);
};

您可以在override OnAppearing()方法的末尾写入此项。此外,ListView有一个ItemExaming事件,您可以在视图中使用它,以防需要处理新消息。C。Yu是的,我试着连接到itemseapping事件,但是每当一个新的项目被滚动到视图中时,它似乎就会启动。是的,这似乎可以实现这个技巧,并且比我尝试的要简单得多。谢谢:D@Fireprufe15没问题!快乐编码