使用数据绑定在LongListSelector中滚动的奇怪行为 - Windows Phone 8

时间:2015-03-11 20:00:03

标签: windows-phone-8 data-binding longlistselector

我有一个应用程序,我将用户的联系人保存在本地数据库中,然后使用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

这个数字是否意味着什么?

0 个答案:

没有答案