ListView 在 ScrollTo 时抛出 UnhandledException
Posted
技术标签:
【中文标题】ListView 在 ScrollTo 时抛出 UnhandledException【英文标题】:ListView throws UnhandledException when ScrollTo 【发布时间】:2017-02-23 23:44:19 【问题描述】:我有一个像这样的 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 上
【问题讨论】:
“未处理的异常”仅表示您没有捕获异常 - 如果您捕获了异常,它可能会提供问题描述。 我尝试用 try-catch 包围它,但没有成功。 除非真的有必要,否则不要使用async void
。它适用于事件和事件之类的方法。您无法从 async void
方法中捕获异常。事实上,根本没有异步代码,所以删除 async
修饰符或让它返回一个 Task
,您将能够捕获异常。
我在方法中添加了捕获(sorrunding ScrollTo
)。当我使用Task.Delay
时,使用了async
【参考方案1】:
我发现,如果我将 SetEvents
从构造函数移到 OnAppearing
它可以工作
【讨论】:
以上是关于ListView 在 ScrollTo 时抛出 UnhandledException的主要内容,如果未能解决你的问题,请参考以下文章
为啥进程列表时抛出 java.lang.UnsupportedOperationException [重复]
DataAdapter 在填充 DataTable 时抛出错误