2016-11-02 1 views
1

ListView에서 처리되는 항목 목록이 있습니다. 기본적으로 ListView는 처음부터 끝까지 (스크롤링)를 보여줍니다.Xamarin Forms에서 대신 마지막 항목을 표시하기 위해 ListView를 설정하는 방법은 무엇입니까?

ListView를 맨 아래에서 시작하도록 어떻게 설정합니까?

사용법 : 채팅 메시지보기 - 여기서 채팅의 마지막 메시지를 표시하고 해당 메시지로 스크롤해야합니다.

+0

목록보기 항목을 목록보기 항목에 넣기 전에 되돌리기를 시도 했습니까? – Poody

+0

코드를 친절하게 포함시켜 구현 방법을 확인할 수 있습니다. –

+0

흠. 그것으로, 나는 여전히 첫 번째 항목이 마지막 항목 (역순 정렬)이되도록 스크롤의 상단부터 시작합니다. – Raven

답변

7

ListView에서 ScrollTo을 사용하여 설정 한 위치로 스크롤 할 수 있습니다. OnAppearing 메소드를 덮어 써야합니다.

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

그럼 그냥 (System.Action 인) RefreshScrollDown 전화를 아래로 스크롤 할 때마다, 예를 들면 :이 ListView ViewModel.Messages의 끝으로 스크롤하기위한 예입니다 새 메시지를 받거나 채팅을로드 할 때

참고 : 경우에 당신이 해결했습니다 목록보기 높이 ScrollTo 목록 높이를 복용하고 우리는 크기를 원래 크기로 이동 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(); 

      } 
     } 
+1

니스! 팁 주셔서 감사합니다 - 지금 내 질문에 모든 항목을 내 ListView에로드 된 일단 트리거 될 수 있도록이 위치에 배치됩니다. 페이지의 onAppearing 메서드를 재정의하고 추가해야합니까? – Raven

+0

많은 사람 감사합니다! 완전히 수정 :) – Raven

+0

IOS에서 작동하지만 안드로이드에서 아무것도하지 않는 것 같습니다. 로드 된 후 목록이 스크롤되지 않습니다. – Raven

관련 문제