将 Observable 集合绑定到 ListView

Bind Observable collection to ListView

使用 Xamarin 和 Visual Studio 2017,我在调试时收到一条摘要 The application is in break mode 消息。

当使用 try-catch 时,没有捕获到任何东西。

我已经调试过返回的TimeLog集合不为空。 from&toDateTime 值给出。

TimeLogs 是与 ItemsSource 一起应用于 ListView 的可观察集合。

private ObservableCollection<ExtendedTimeLog> TimeLogs;

在代码隐藏文件的构造函数中:

TimeLogs = new ObservableCollection<ExtendedTimeLog>();
TimeLogView.ItemsSource = TimeLogs;

收集非空日志后,进程崩溃。

private async Task RefreshTimeLogs(long from, long to)
{
         TimeLogs.Clear();
         var logs = await DB.GetExtendedTimeLogs(from, to);

         foreach (var element in logs)
             TimeLogs.Add(element);
}

刷新方法由日期选择器{To,From}_DateSelected 方法调用。

  <DatePicker x:Name="datepickerFrom" Grid.Row="0" DateSelected="datepickerFrom_DateSelected"></DatePicker>

XAML:

<ListView  x:Name="TimeLogView" Grid.Row="2">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                                <StackLayout Orientation="Horizontal">

                                    <TextCell Text="{Binding From}" />
                                    <TextCell Text="{Binding To}"   />
                                    <TextCell Text="{Binding Note}" />

                                </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

如果集合为空(在 for 循环中)且可观察集合未更改,则不会发生应用程序崩溃。

必须修改什么?

对我来说,效果很好。 3 个 TextCell 条目被替换为 Label