在 Xamarin 中自动向下滚动 ListView

Automatically scroll down ListView in Xamarin

我有 ListView 绑定 ItemsSource(它是 ObservableRangeCollection)。我想在页面出现时自动向下滚动 ListView。我该怎么办?
View:

<ListView 
        x:Name="ListAdd"            
        ItemsSource="{Binding AddNewFlashcard}"
        (...)
            >
            <ListView.Behaviors>
                <(...)>
            </ListView.Behaviors>
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="models:Flashcard">
                    <ViewCell>
                        <Grid Padding="10">
                            <Frame CornerRadius="20" HasShadow="True">
                                <StackLayout VerticalOptions="Center">
                                    <Label FontSize="Large"
                                        Text="{Binding Word}"
                                   VerticalOptions="Center"/>
                                    <Label Text="{Binding Sentence}"
                                   VerticalOptions="Center"/>
                                </StackLayout>
                            </Frame>
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

它是 ViewModel:

public ObservableRangeCollection<Flashcard> AddNewFlashcard { get; set; }

        public NewFlashcardVM()
        {            
            Refresh();
            AddNewFlashcard = new ObservableRangeCollection<Flashcard>(); 
        }



        public async void Refresh() 
        {
            IsBusy = true;      
            var flashcards = await FlashcardService.GetFlashcard();
            AddNewFlashcard.AddRange(flashcards);
            IsBusy = false;
        }

你可以在ListView中调用ScrollTo方法达到你想要的效果

我写了一个小例子供大家参考。

这里是 xaml 代码:

<StackLayout>
    <Frame HeightRequest="100">
        <ListView x:Name="mytest" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Label Text="{Binding .}"></Label>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Frame>
</StackLayout>

这里是后台代码(加载数据时,在OnAppearing方法中调用ListView的ScrollTo方法):

public partial class MainPage : ContentPage
{
    ObservableRangeCollection<string> myList;
    public MainPage()
    {
        InitializeComponent();
        myList = new ObservableRangeCollection<string>();
        myList.Add("aaa");
        myList.Add("aaa");
        myList.Add("aaa");
        myList.Add("aaa");
        myList.Add("aaa");
        myList.Add("aaa"); 
        myList.Add("bbb");
        mytest.ItemsSource = myList;
        BindingContext = this;
    }
    protected override void OnAppearing()
    {
        base.OnAppearing();
        mytest.ScrollTo(myList[myList.Count-1], ScrollToPosition.End,false);
    }
}

如果把ScrollTo的最后一个参数改成true,就会出现滑动动画发生。