locked
WP8.1中ListView快速滑动时,Item错乱 RRS feed

  • 问题

  • 如题:

    WP8.1应用,ListView控件绑定了大约30个Item,然后滑动ListView时,Item错乱,

    ListView中,我编辑了【项模板】和【Foot模板】

    然后在代码中绑定数据,

    如图:右侧是正常显示,左侧是滑动时错乱了,

    2014年8月20日 10:53

答案

  • 楼主 你好,

    根据你的代码,我这边没有能够重现这个问题。我猜测是环境不一致造成的。我的开发环境,VS 2013 with Update3。我的Device目前是WP8.1,测试结果是OK的。

    根据这个问题的现象,我想可以这样来操作。如果是因为ListView中的VirtualStackPanel造成的,我们可以在ControlTemplate把它修改为StackPanel。

    另外,ListView中的内容不要超过当前页面的宽度,这样不影响页面的阅读。

    关于ListView快速滑动的问题,我们会继续跟进。

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 jesse hao 2014年9月5日 10:27
    2014年8月22日 1:31
    版主

全部回复

  • 楼主 你好,

    我在本地创建了一个WP8.1 RT的APP来重现这个问题,我没有自定义ListView的Hear和Foot,运行时OK的。下面是运行截图:

    建议提供一下Header与Footer的模板,这样便于还原问题。

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年8月21日 4:18
    版主
  • 您好,多谢您的回答,我找到出现bug的因素了:

    ListView中,数据源的宽度超过屏幕就会出现上述bug,以下是代码:

    XMAL

        <Page.Resources>
            <DataTemplate x:Key="AudioItemTemplate">
                <Grid Margin="20,10">
                    <TextBlock Text="{Binding}" FontSize="32"  VerticalAlignment="Center"/>
                </Grid>
            </DataTemplate>
        </Page.Resources>
    
        <Grid x:Name="LayoutRoot">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <StackPanel Margin="20,40,20,10">
                <TextBlock Text="Lyric+" FontSize="18"/>
                <TextBlock Text="所有音乐" FontSize="48" Margin="0,8,0,0"/>
            </StackPanel>
            <Grid Grid.Row="1">
                <ListView x:Name="listView_Audio" ItemTemplate="{StaticResource AudioItemTemplate}"/>
            </Grid>
        </Grid>

    CS

    void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                var list = new List<string>();
                list.Add("这是第000项这是第000项这是第000项");
                list.Add("这是第000项这是第000项这是第000项");
                list.Add("这是第000项这是第000项这是第000项");
                list.Add("这是第000项这是第000项这是第000项");
                for (int i = 0; i < 50; i++)
                {
                    list.Add("这是第 " + i + " 项");
                }
    
                listView_Audio.ItemsSource = list;
            }

    就是那些【这是第000项这是第000项这是第000项】导致的,您测试一下,

    我这面使用真机测试的:

    Lumia 820,系统版本是8.10.14157.200(即WP8.1 Update1)

    我怀疑是ListView在虚拟化Item时报错的,由于Item的宽度不一致,有些Item超出屏幕宽度,导致计算错误,



    2014年8月21日 8:48
  • 问题解决了,但我觉得解决的不是很完美:

        <Page.Resources>
            <DataTemplate x:Key="AudioItemTemplate">
                <Grid Margin="20,10">
                    <TextBlock Text="{Binding}" HorizontalAlignment="Left" FontSize="32" Margin="0,0,-1000,0"/>
                </Grid>
            </DataTemplate>
        </Page.Resources>

    加一个【Margin="0,0,-1000,0"】就可以了,

    但偶尔还是有错乱的现象,不知您有没有更好的解决方案?

    另外,我发现快速滑动ListView时,里面的Item会突然消失,然后又出现,这应该也是虚拟化Item时速度跟不上导致的,不知有没有 好的解决方案?



    2014年8月21日 8:57
  • 楼主 你好,

    根据你的代码,我这边没有能够重现这个问题。我猜测是环境不一致造成的。我的开发环境,VS 2013 with Update3。我的Device目前是WP8.1,测试结果是OK的。

    根据这个问题的现象,我想可以这样来操作。如果是因为ListView中的VirtualStackPanel造成的,我们可以在ControlTemplate把它修改为StackPanel。

    另外,ListView中的内容不要超过当前页面的宽度,这样不影响页面的阅读。

    关于ListView快速滑动的问题,我们会继续跟进。

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 jesse hao 2014年9月5日 10:27
    2014年8月22日 1:31
    版主
  • 您好,我将我这里出现bug的源码共享到onedrive了,麻烦您帮我看一看:

    https://onedrive.live.com/redir?resid=5AF370ECCEBE027D!26576&authkey=!AG5QnSkd3N9uewE&ithint=file%2czip

    我的开发环境是:

    Windows 8.1 64位 专业版

    Visual Studio 2013 update3

    我的测试设备是:

    Lumia 820,系统版本是8.10.14157.200(即WP8.1 Update1)

    此代码的bug在我的测试环境下可以重现,快速滑动list时,每次都重现,

    2014年8月22日 3:13