none
ListView切换数据崩溃Bug RRS feed

  • 问题

  • 做了个ListView切换数据的Demo,貌似发现了一个比较严重的Bug,不知道有没有前辈遇到过,有啥解决办法没有。。。。

    在Page中添加了一个ListView,绑定好数据,之后在点击这个ListView的Item的时候切换这个ListView的数据,当切换数据动画播放的时候再次点击ListView则直接崩溃(快速点击ListView)。

    具体代码如下:

    XAML

    <ListView Name="lv" SelectionChanged="lv_SelectionChanged_1">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid Margin="30,0,0,0">
                            <TextBlock Text="{Binding Name}" Foreground="Red" FontSize="25"/>
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

    CS

        public sealed partial class TestPage : Page
        {
            private TestViewModel viewModel;
            private bool ShowData1 = true;
            public TestPage()
            {
                InitializeComponent();
                viewModel = new TestViewModel();
                lv.ItemsSource = viewModel.Data;
    
                viewModel.GetData1();
            }
    
            private void lv_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
            {
                if (ShowData1)
                {
                    viewModel.GetData2();
                    ShowData1 = false;
                }
                else
                {
                    viewModel.GetData1();
                    ShowData1 = true;
                }
            }
        }
    
        public class People
        {
            public string Name { get; set; }
        }
    
        public class TestViewModel
        {
            public ObservableCollection<People> Data;
            public TestViewModel()
            {
                Data = new ObservableCollection<People>();
            }
    
            public void GetData1()
            {
                Data.Clear();
    
                for (int i = 0; i < 20; i++)
                {
                    Data.Add(new People() { Name = "Jack" + i });
                }
            }
    
            public void GetData2()
            {
                Data.Clear();
    
                for (int i = 0; i < 20; i++)
                {
                    Data.Add(new People() { Name = "Tom" + i });
                }
            }
        }


    • 已编辑 Seraph89 2012年9月5日 8:03
    2012年9月5日 7:36

全部回复

  • Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)) 异常。我查到确实有这类bug的报告,在英文论坛http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/295d7ee6-8bc4-4326-9ea7-b68ee4c98a7a 此贴有描述,看上去是

    lv.ItemsSource 设置上的问题。

    你先用这个workaround:

            private void lv_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
            {
                if (ShowData1)
                {
                    lv.ItemsSource = null;
                    viewModel.GetData2();
                    lv.ItemsSource = viewModel.Data;
                    ShowData1 = false;
                }
                else
                {
                    lv.ItemsSource = null;
                    viewModel.GetData1();
                    lv.ItemsSource = viewModel.Data;
                    ShowData1 = true;
                }
            }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月6日 6:33
    版主
  • 谢谢您的回复

    尝试了下这个逻辑,还是会有崩溃的Bug 同样的错误。。。。。

    不知道是否还有什么别的解决方案么 谢谢

    2012年9月7日 1:37