我的列表是HubSection中唯一的元素。它由以下DataTemplate定义:
<!-- List -->
<DataTemplate x:Key="GeofenceEventsList" >
<ListView ItemsSource="{Binding EventData}" SelectionMode="None" IsSwipeEnabled="False"
IsItemClickEnabled="False" ScrollViewer.VerticalScrollBarVisibility="Auto"
ItemTemplate="{StaticResource GeofenceEventsListItem}" />
</DataTemplate>
GeofenceEventsListItem
数据模板很简单:一个Grid
有3行,每行有一个文本块(第一行在StackPanel
中有3个文本块)。
以下ListView
引用了Hub
:
<Hub x:Name="Container" Grid.Row="1" Background="{StaticResource AppBackground}"
HeaderTemplate="{StaticResource PageHeader}">
<HubSection HeaderTemplate="{StaticResource HubHeader}"
Header="Recent events"
DataContext="{Binding Path=GeofencesViewModel}"
ContentTemplate="{StaticResource GeofenceEventsList}" />
<HubSection HeaderTemplate="{StaticResource HubHeader}"
Header="Geofences"
DataContext="{Binding Path=GeofencesViewModel}"
ContentTemplate="{StaticResource GeofencesList}" />
<!-- Other HubSections... -->
</Hub>
后面的ViewModel的关键部分如下所示:
//Constructor:
public GeofencesViewModel(FacebookDataProvider facebookDataProvider) : base(facebookDataProvider)
{
_eventData = new ObservableCollection<GeofenceEventSchema>();
}
//Property:
private readonly ObservableCollection<GeofenceEventSchema> _eventData;
public IEnumerable<GeofenceEventSchema> EventData
{
get
{
Debug.WriteLine("EventData queried.");
return _eventData;
}
}
public async Task OnNavigatedTo()
{
//...
var geoFenceEvents = await AppCacheSimple.GetItemsAsync<GeofenceEventSchema>(GeofenceEventSchema.CacheKey);
_eventData.Clear();
//ListView crashes when we take 6 or more items, and scrolling becomes neccessary
//The screen can fit 4.9 items
_eventData.AddRange(geoFenceEvents.Take(6));
//...
}
这是在WindowsPhone 8.1上运行的通用应用程序的一部分。
该应用适用于ListView
中的5个或更少项目。
当我尝试滚动列表时,列表中有6个项目发生崩溃。 (Visual Studio可以使用Windows.UI.Xaml.UnhandledException,但调试是不可能的,因为手机只关闭了应用程序并且VS冻结了。)
列表中有8个项目,应用程序在加载页面后立即崩溃:VS根本无法捕获任何内容,甚至没有意识到应用程序已关闭。