0

我有一个像这样的 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>

当日期更改时,我想滚动到最接近当前日期的事件,但是UnhandledException当我ScrollTo在 UWP 上使用时我得到一个,而 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 上

4

1 回答 1

0

我想通了,如果我将它SetEvents从构造函数移到OnAppearing它的工作原理

于 2016-10-19T06:54:39.687 回答