【问题标题】:Setting ItemsSource of derived ListBox throws "Catastrophic failure"设置派生 ListBox 的 ItemsSource 引发“灾难性故障”
【发布时间】:2012-04-13 21:55:17
【问题描述】:

我正在为 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; 
    }
}

【问题讨论】:

  • 啊,COM报错又回来了!
  • 您找到解决方法了吗?
  • 不。等待Win8的下一个版本(RC),目前bug太多...
  • Items.Add() 和 Items.RemoveAt() 适用于当前版本。不幸的是,我等不及下一个版本了

标签: c# xaml windows-8 microsoft-metro windows-runtime


【解决方案1】:

我在继承 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),我也会遇到灾难性故障(0x8000FFFF)。一旦我使用原始 ListView (不是我的子类版本),一切都会再次正常 - 就像你的情况一样。所以我的回复不能被理解为问题的解决方案,但也许这是一个值得尝试的提示。在我的情况下,原始分配工作正常,问题首先出现在可观察集合尝试更新之后。我尝试了 ObservableCollection(应该在 CP 中工作,但在 DP 中没有),但在那里我遇到了其他问题。听听您是否能够在这条道路上取得任何进展会很有趣...

【讨论】:

  • 是的,当PropertyChangedCollectionChanged 事件被调用时,我也遇到了问题......目前我停止了我的项目(或这个特殊问题),我正在等待 RC应该在六月上市。我还有很多其他问题(DateTime/struct 类型依赖属性不起作用,应用程序只能在模拟器中运行 - 否则会话崩溃,打开 xaml 文件时崩溃,Popup 类杀死包含控件中的绑定,...)我不没有时间为所有这些构建解决方法... :) 无论如何,感谢您的回答。也许我会试一试
  • 我明白了。这很令人沮丧。我在犹豫自己。然而,上次我把希望寄托在 DP->CP 切换上,它并没有神奇地解决最紧迫的问题——我仍然需要构建解决方法——只有不同的解决方法;)希望 RC 体验真的会更流畅。
  • 确实DP->CP解决了很多问题(多个NotifyPropertyChanged /ObservableCollection/Vector乱码)...
  • 我有同样的问题,在 windows phone 8.1 xaml (winrt) 中。我制作了一个从 Listview 继承的控件,以便在滚动结束时添加更多负载,所有工作正常,除非用户在按下刷新按钮后快速按下列表(这会清除有界的 observableCollection 并加载新数据)。另请注意,当我使用普通列表视图时,它工作正常。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2010-12-04
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多