none
WinRT 中 ListView 和 GridView 绑定数据的Bug,闪黑。 RRS feed

  • 问题

  • Bug描述:页面中只有一个ListView和Button,页面背景色为非黑色(白色最好),当点击Button时候给ListView重新绑定数据源,确保数据够多使ListView可以滑动。

    现象:
    1、ListView不滑动,点击按钮重新绑定数据源正常。
    2、ListView滑动一下,再次点击按钮,会发现整个ListView会黑一下。

    关键代码:
    XAML代码:

    <Grid x:Name="LayoutRoot" Background="White">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <ListView x:Name="lv" Background="Transparent">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid >
                            <TextBlock Text="{Binding}" FontSize="25" Foreground="Purple" Margin="19"/>
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
           
            <Button Content="重新绑定" Grid.Row="1" Foreground="Purple" Click="Button_Click"/>
        </Grid>

    CS代码:

    public ObservableCollection<string> dataSource = new ObservableCollection<string>();

    点击代码:

                lv.ItemsSource = new List<string>()
                {
                    "1111","2222","3333","4444","5555","6666","7777","8888","9999","101010","111111","121212","131313","141414","151515","161616","171717","181818","191919"
                };

    经过测试GridView也存在这个问题,求解决方案!

    补充一下:我测试发现并只是闪黑色,闪的颜色跟当前页面的主题有关,当页面主题是深色时RequestedTheme="Dark",闪黑色。当页面主题是浅色时RequestedTheme="Light",闪白色。



    2015年4月1日 9:05

答案

  • 找到原因了,我去掉了ShowsScrollingPlaceholders="False" 这个设置后就会出现“闪黑”的现象。

    儿这个属性是在滚动期间是否显示占位符UI。

    根据我的判断“闪黑”就是显示了占位符。儿这个占位符UI的颜色应该是当前页面的背景色ApplicationPageBackgroundThemeBrush。

    • 已标记为答案 十八子 2015年4月7日 2:18
    2015年4月3日 9:18

全部回复

  • 已解决,不过应该不是最终方案。

    用ObservableCollection 做数据源。

    先调用clear方法。

    然后 调用 await Task.Delay(1);

    最后在循环加入新内容。

     private async void Button_Click(object sender, RoutedEventArgs e)
            {
                dataSource.Clear();
                await Task.Delay(1);
                for (int i = 1; i <= 20; i++)
                {
                    dataSource.Add(string.Format("{0}{0}{0}", i.ToString()));
                }
            }

    2015年4月1日 14:17
  • 你好,

    我根据你的要求对MSDN的sample进行了修改和测试,没有发现你说的闪屏现象。现将我的测试代码post上来,请和你的代码一起看一下。

    先从这里下载sample, https://code.msdn.microsoft.com/windowsapps/ListViewSimple-d5fc27dd

    在项目中Secnario3_ListView.xaml的XAML里面添加一个Button。

    复制后台代码到Click事件中。

     private void Button_Click(object sender, RoutedEventArgs e)
            {
                  Uri _baseUri = new Uri("ms-appx:///");
                var item = new Item();
                item.Title = "aaaaa";
                item.Subtitle = "bbbbbbbbbbbbbb";
                item.SetImage(_baseUri, "SampleData/Images/60SauceChocolate.png");
                item.Link = "http://www.blueyonderairlines.com/";
                item.Category = "Ice Cream";
                item.Description = "eeeeeeeeee";
                item.Content = "dddddddddddddddd";
                storeData.Collection.Add(item);
                ItemListView.ItemsSource = null;
                ItemListView.ItemsSource = storeData.Collection;
            }
    请尝试一下然后告诉我结果。


    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.

    2015年4月2日 3:37
  • 找到原因了,我去掉了ShowsScrollingPlaceholders="False" 这个设置后就会出现“闪黑”的现象。

    儿这个属性是在滚动期间是否显示占位符UI。

    根据我的判断“闪黑”就是显示了占位符。儿这个占位符UI的颜色应该是当前页面的背景色ApplicationPageBackgroundThemeBrush。

    • 已标记为答案 十八子 2015年4月7日 2:18
    2015年4月3日 9:18