我有一个应用程序,我将用户的联系人保存在本地数据库中,然后使用ObservableCollection将这些联系人绑定到LongListSelector中以更新UI(当添加或删除新项目时)。
但是当ObservableCollection发生变化时,我有一种奇怪的行为...... 该项目正确地添加到UI,但在此之后,当我快速滚动时,列表中间会出现一个空白区域。 然后我发现,显然,这份清单正在削减一些物品......
我正在测试140个项目(字符串)的列表,至少有一个项目以每个字母开头。
当这个问题发生时,我看到带有C字母的项目后,用P字母开始了项目(D到O消失了!)。
有人能告诉我发生了什么吗?
我以这种方式绑定LongListSelector上的项目:
XAML:
<Grid x:Name="ContentPanelContatos" Grid.Row="1" Margin="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
<Grid x:Name="gridContatos" Grid.Row="1" Margin="12,2,12,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="0,0,0,12" >
<TextBox x:Name="tbxSearch" VerticalAlignment="Top" HorizontalAlignment="Stretch" Visibility="Collapsed" TextChanged="TbxSearch_TextChanged" LostFocus="TbxSearch_LostFocus" Style="{StaticResource TextBoxStyle}" />
</Grid>
<phone:LongListSelector Grid.Row="1" x:Name="llsContacts" ItemsSource="{Binding}" SelectionChanged="llsContacts_SelectionChanged" >
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<ListBoxItem local:TiltEffect.IsTiltEnabled="true">
<Grid Margin="0,0,0,10" >
<TextBlock Text="{Binding COLUMN_NAME, Mode=TwoWay}" FontFamily="Segoe WP" FontSize="28" Margin="77,0,0,0" />
<TextBlock Text="{Binding Path=COLUMN_NUMBER, Mode=TwoWay}" FontFamily="Segoe WP Light" FontSize="17" Margin="77,33,0,0"/>
</Grid>
</ListBoxItem>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</Grid>
<!-- more 2 grids with contents -->
</Grid>
CS:
public ObservableCollection list;
public Main()
{
InitializeComponent();
list = new ObservableCollection<MyClass>(GetDataFromDatabase);
llsContacts.DataContext = list;
}
当我在DataBase上插入或删除某些内容时,我也会在列表上进行更改:
list.Add(newData);
我在做什么吗?
阅读本文:Frame rate counters in Windows Phone,我注意到当出现此问题时,调试时屏幕侧面的一些数字会停止更改...
他们这样停下来:
用户界面线程FPS:000 纹理内存使用:007181 表面计数器:050 中间纹理计数器:002
这个数字是否意味着什么?