派生 ListBox 的设置 ItemsSource 会抛出“灾难性失败”错误。

6
我正在开发Windows 8 WinRT框架。以下示例代码会抛出异常:
Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
这是当前WinRT框架中的另一个错误吗?(我使用的是VS11和Consumer Preview)有人知道如何解决这个问题吗?
顺便说一下:我已经在Windows Phone 7.5 Silverlight上测试了相同的代码,没有任何问题...
感谢您的帮助。
public class MyListBox : ListBox
{

}

public sealed partial class BlankPage : Page
{
    public BlankPage()
    {
        this.InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var box1 = new ListBox(); 
        box1.ItemsSource = new List<Object> { new Object() }; // works without problems
        Content = box1; 

        var box2 = new MyListBox();
        box2.ItemsSource = new List<Object> { new Object() }; // throws exception
        Content = box2; 
    }
}

2
我相当确定这是Windows 8 Consumer Preview中已知的一个错误。 (http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/295d7ee6-8bc4-4326-9ea7-b68ee4c98a7a) - James McNellis
啊,COM错误报告又回来了! - Hans Passant
你找到了任何解决方法吗? - notacat
不行,等待Win8的下一个发布候选版,目前有太多的漏洞... - Rico Suter
Items.Add() 和 Items.RemoveAt() 可以在当前版本中使用。不幸的是,我不能等待下一个发布版本。 - notacat
1个回答

2

当我子类化ListView时,遇到了类似的问题。在我的情况下,以下方法部分地有所帮助: 我停止在代码后台直接设置ListView的ItemsSource,而是在XAML中创建了CollectionViewSource,例如:

<UserControl.Resources>
    <CollectionViewSource x:Name="myCollectionViewSource"/>
</UserControl.Resources>
...
...
<ListView
    ...
    ItemsSource="{Binding Source={StaticResource myCollectionViewSource}}" />

在代码后台,我设置了以下内容:

this.myCollectionViewSource.Source = new List<Object> { new Object() }; // The real data source respectively

然而,这似乎只是推迟了问题。至少在我的情况下是这样。在我的真实示例中,我使用ObservableVector作为数据源。并且只要执行任何ObservableVector集合的更改(例如Clear),我也会遇到Catastrophic failure(0x8000FFFF)。只要我使用原始的ListView(而不是我的子类版本),所有东西都能正常工作 - 就像在您的情况下一样。因此,我的回复不能被理解为问题的解决方案,但也许它是值得尝试的提示。在我的情况下,原始赋值很好用,在可观察集合尝试更新后才出现问题。我尝试过ObservableCollection(应该在CP中工作,但在DP中没有),但我遇到了其他问题。很有趣听到您是否能够在这条路上取得进展...

是的,当调用 PropertyChangedCollectionChanged 事件时我也遇到了问题... 目前我停止了我的项目(或这个特定的问题),并且正在等待 RC 版本,该版本应该在六月份发布。我还遇到了许多其他问题(DateTime/结构类型依赖属性不起作用,应用程序只能在模拟器中工作——否则会出现会话崩溃,打开 xaml 文件时 vs 崩溃,Popup 类会破坏包含控件中的绑定,...)我没有时间为所有这些问题构建解决方法... :) 无论如何,感谢你的回答。也许我会尝试一下。 - Rico Suter
我理解。这真的很令人沮丧。我也在犹豫。然而,上次我把希望寄托在DP->CP切换上,但它并没有神奇地解决最紧迫的问题——我仍然不得不构建解决方案——只是不同的解决方案而已 ;) 希望RC体验真的会更加顺畅。 - Jan Zeman
确实,DP->CP 解决了许多问题(多个 NotifyPropertyChanged / ObservableCollection / Vector 混乱的情况)... - Rico Suter
我有同样的问题,在Windows Phone 8.1 XAML(WinRT)中。我制作了一个继承自Listview的控件,以在滚动结束时添加更多加载项,一切正常工作,除非用户在按下刷新按钮后快速按列表(这会清除可观察到集合并加载新数据)。还要注意的是,当我使用普通列表视图时,它可以正常工作。有什么建议吗? - Ahmed Rashad Mohamed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接