ListView 在 ScrollTo 时抛出 UnhandledException

ListView throws UnhandledException when ScrollTo

我有一个像这样的带有 ListView 的简单页面

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
   xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
   x:Class="ListViewDemo.MainPage">

   <StackLayout>
      <Grid>
         <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
         </Grid.ColumnDefinitions>
         <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
         </Grid.RowDefinitions>
         <Label Text="From" />
         <DatePicker x:Name="fromPicker" Grid.Row="1" />
         <Label Text="To" Grid.Column="1" />
         <DatePicker x:Name="toPicker" Grid.Column="1" Grid.Row="1" />
      </Grid>
      <ListView>
         <ListView.ItemTemplate>
            <DataTemplate>
               <ViewCell>
                  <StackLayout>
                     <Label Text="{Binding FromDate}" />
                     <Label Text="{Binding ToDate}" />
                  </StackLayout>
               </ViewCell>
            </DataTemplate>
         </ListView.ItemTemplate>
      </ListView>
   </StackLayout>

 </ContentPage>

当日期更改时,我想滚动到最接近当前日期的事件,但是当我在 UWP 上使用 ScrollTo 时,我得到一个 UnhandledException,而 iOS 只是不要滚动。

我正在考虑使用 ItemAppearing,但如果列表中的事件足够多,它是否值得信赖?

如果我使用 await Task.Delay(500),我不会得到 UnhandledException,而是内容会跳到我的屏幕上。

这个问题有什么解决办法吗?

public void SetEvents(params CalenderEventDto[] events)
{
   var dateToScrollTo = DateTime.Now.Date;

   var scrollToEvent = events?.OrderBy(x => x.Start.Date)?.FirstOrDefault(c => c.Start.Date >= dateToScrollTo  || c.End.Date >= dateToScrollTo );

   var orderedEvents = events.GroupBy(x => x.Start.Date).OrderBy(x => x.Key);

   _calendarEvents.Clear();

   foreach (var groupedEvents in orderedEvents)
   {
      foreach (var calendarEvent in groupedEvents)
      {
         _calendarEvents.Add(calendarEvent);
      }
   }

   //await Task.Delay(450);
   Device.BeginInvokeOnMainThread(() => lstCalendar.ScrollTo(scrollToEvent, ScrollToPosition.Start, false));
}

编辑
我想通了,问题也出在 iOS

我想通了,如果我将 SetEvents 从构造函数移到 OnAppearing 就可以了