如何将列表视图设置为在Xamarin窗体中开始显示最后一个项目

本文关键字:窗体 开始 显示 项目 最后一个 Xamarin 列表 视图 设置 | 更新日期: 2023-09-27 18:16:05

我有一个由ListView处理的项目列表。默认情况下,ListView显示从开始到底部(滚动)。

如何将ListView设置为从底部开始?

用法:聊天消息视图-其中我需要显示聊天的最后一条消息并滚动到该消息

如何将列表视图设置为在Xamarin窗体中开始显示最后一个项目

您可以在ListView中使用ScrollTo滚动到您设置的任何位置。需要覆盖OnAppearing方法。这是一个滚动到ListView ViewModel结束的示例。消息:

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),每次你需要向下滚动,例如,当你收到一个新的消息或当你加载聊天。

refreshrolldown in ViewModel:

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();
            }
        }