【问题标题】:XAML - ListView DoubleTapped Catastrophic failureXAML - ListView DoubleTapped 灾难性故障
【发布时间】:2014-02-05 09:17:45
【问题描述】:

当使用双击事件时 ListViews ItemSource - ObservableCollection 加载的项目较少时,我会遇到灾难性故障。现在写了一个非常简单的例子,我仍然得到同样的错误。

这是一个 Windows 8.1 应用商店应用程序。

简单示例:如果列表视图中有 6 个项目,并且我双击项目编号 3。然后列表视图重新绑定 4 个项目。这很完美。

但是,如果我双击第 5 或 6 号项目,我会遇到灾难性故障。

代码:

    <ListView x:Name="myListView" DoubleTapped="myListView_DoubleTapped" />

    public MainPage()
    {
        this.InitializeComponent();

        List<string> list1 = new List<string>();

        list1.Add("item1");
        list1.Add("item2");
        list1.Add("item3");
        list1.Add("item4");
        list1.Add("item5");
        list1.Add("item6");

        myListView.ItemsSource = list1;
    }

    private void myListView_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
    {
        List<string> list2 = new List<string>();

        list2.Add("OterhItem1");
        list2.Add("OterhItem2");
        list2.Add("OterhItem3");
        list2.Add("OterhItem4");

        myListView.ItemsSource = list2;
    }

更新:我尝试了相同的方法,但只有一个 Tapped 事件,它工作正常。所以看起来这只发生在双击事件上。

【问题讨论】:

  • DoubleTapped 事件触发了多少次?我知道有些人多次开火时遇到过问题。您可能需要确保 ItemsSource 只设置一次。此外,使用ObservableCollection(在这种情况下为&lt;string&gt;)并直接操作它可能更容易,而不是每次都将ItemsSource设置为一个新对象。
  • 它只触发一次。我的原始代码,我使用的是 ObservableCollection。但这是一个相当大的项目,所以为了消除我这边所有可能出现的问题,我尝试在尽可能小的版本上复制它。我仍然遇到问题。
  • 您找到解决方法了吗?我遇到了完全相同的问题
  • 不,我没有。我刚刚重新设计了我的应用程序在前端的工作方式。这样我就不需要双击了。

标签: xaml listview winrt-xaml itemsource


【解决方案1】:

我很确定问题是由新值的动画引起的,因为我在我的应用程序中得到了类似的东西。

Frame fr = Window.Current.Content as Frame;
fr.IsEnabled = false;
   UpdateCollectionSomehow(...)
fr.IsEnabled = true;

在我的代码中,我只是在添加更多元素之前禁用代码,问题就消失了。

【讨论】:

    猜你喜欢
    • 2010-12-04
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多