XAML-ListView双重抽头灾难性故障
当使用双击事件时,当ListViews ItemSource-ObservableCollection加载较少的项时,我会遇到灾难性的失败。现在a写了一个非常简单的例子,我仍然得到同样的错误 这是一个Windows 8.1应用商店应用程序 简单示例:如果我在listview中有6个项目,我双击项目编号3。然后,ListView用4项重新绑定。这很好用 但如果我双击项目编号5或6,我会得到灾难性的失败 代码:XAML-ListView双重抽头灾难性故障,xaml,listview,winrt-xaml,itemsource,Xaml,Listview,Winrt Xaml,Itemsource,当使用双击事件时,当ListViews ItemSource-ObservableCollection加载较少的项时,我会遇到灾难性的失败。现在a写了一个非常简单的例子,我仍然得到同样的错误 这是一个Windows 8.1应用商店应用程序 简单示例:如果我在listview中有6个项目,我双击项目编号3。然后,ListView用4项重新绑定。这很好用 但如果我双击项目编号5或6,我会得到灾难性的失败 代码: <ListView x:Name="myListView" DoubleT
<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;
}
公共主页()
{
this.InitializeComponent();
List list1=新列表();
清单1.添加(“项目1”);
清单1.添加(“项目2”);
清单1.添加(“第3项”);
清单1.添加(“第4项”);
清单1.添加(“第5项”);
清单1.添加(“第6项”);
myListView.ItemsSource=list1;
}
私有void myListView_双击(对象发送方,双击路由数据源)
{
List list2=新列表();
清单2.添加(“OterhItem1”);
清单2.添加(“OterhItem2”);
清单2.添加(“OterhItem3”);
清单2.添加(“OterhItem4”);
myListView.ItemsSource=list2;
}
更新:我尝试了同样的方法,但只使用了一个点击事件,效果很好。所以看起来这只会发生在双击事件中。我很确定这个问题是由在新值中设置动画引起的,因为我在我的应用程序中得到了类似的结果
Frame fr = Window.Current.Content as Frame;
fr.IsEnabled = false;
UpdateCollectionSomehow(...)
fr.IsEnabled = true;
在我的代码中,我只是在添加更多元素之前禁用了代码,问题就消失了。双击事件触发了多少次?我知道有些人对他们不止一次的开火有意见。您可能需要确保
itemsource
仅设置一次。此外,与其每次都将项资源
设置为一个新对象,还不如使用可观察集合
(
,在本例中)并直接操作它。它只触发一次。我的原始代码,我使用的是ObservableCollection。但这是一个相当大的项目,所以为了消除我这边所有可能的问题,我尝试在尽可能小的版本上复制它。我还是有问题,你找到解决办法了吗?我的问题和以前完全一样。我刚刚重新设计了我的应用程序在前端的工作方式。这样我就不需要双击了。