我有一个由ListView处理的项目列表。默认情况下,ListView显示从开始到底部(滚动)。
如何将ListView设置为从底部开始?
使用方法: 聊天消息视图 - 其中我需要显示聊天的最后一条消息并滚动到该消息。
答案 0 :(得分:12)
您可以在ScrollTo
中使用ListView
滚动到您设置的任意位置。您需要覆盖OnAppearing
方法。这是滚动到ListView
ViewModel.Messages结尾的示例:
protected override void OnAppearing()
{
base.OnAppearing();
ViewModel.RefreshScrollDown = () => {
if (ViewModel.Messages.Count > 0) {
Device.BeginInvokeOnMainThread (() => {
ListViewMessages.ScrollTo (ViewModel.Messages [ViewModel.Messages.Count - 1], ScrollToPosition.End, true);
});
}
};
}
然后每次需要向下滚动时,只需致电RefreshScrollDown
(System.Action
),例如当您收到新消息或加载聊天时。
ViewModel中的RefreshScrollDown:
public System.Action RefreshScrollDown;
您可以在后面的代码中获取ViewModel:
private MessagePhonePageViewModel ViewModel {
get { return BindingContext as MessagePhonePageViewModel;}
}
注意:使用固定ListView
高度时存在错误。更改HeightRequest
时, ScrollTo 仍会使用列表的原始高度来计算滚动到的位置。更改HeightRequest
中的值时,不会更新原始高度。要解决此问题:
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == Xamarin.Forms.ListView.HeightRequestProperty.PropertyName)
{
Control.LayoutParameters.Height =(int)(sender as Xamarin.Forms.ListView).HeightRequest;
Control.RequestLayout();
}
}