簡體   English   中英

如何將ListView設置為開始在Xamarin Forms中顯示最后一個項目?

[英]How to set ListView to Start showing the last Item instead in Xamarin Forms?

我有一個由ListView處理的項目列表。 默認情況下,ListView顯示從開始到底部(滾動)。

如何將ListView設置為從底部開始?

用法:聊天消息視圖 - 其中我需要顯示聊天的最后一條消息並滾動到該消息。

您可以在ListView使用ScrollTo滾動到您設置的任何位置。 您需要覆蓋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高度時有一個錯誤。 更改HeightRequestScrollTo仍然使用列表的原始高度來計算滾動到的位置。 更改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();

            }
        }  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM