C# 设置派生ListBox的ItemsSource抛出;“灾难性故障”;

C# 设置派生ListBox的ItemsSource抛出;“灾难性故障”;,c#,xaml,windows-8,microsoft-metro,windows-runtime,C#,Xaml,Windows 8,Microsoft Metro,Windows Runtime,我正在为Windows8WinRT框架开发。以下示例代码引发异常: 灾难性故障(HRESULT异常:0x8000FFFF(E_意外)) 这是当前WinRT框架中的又一个bug吗(我使用的是VS11和Consumer Preview)?有人知道如何解决这个问题吗 顺便说一句:我已经用WindowsPhone7.5Silverlight测试了相同的代码,它可以正常工作 谢谢你的帮助 public class MyListBox : ListBox { } public sealed partia

我正在为Windows8WinRT框架开发。以下示例代码引发异常:

灾难性故障(HRESULT异常:0x8000FFFF(E_意外))

这是当前WinRT框架中的又一个bug吗(我使用的是VS11和Consumer Preview)?有人知道如何解决这个问题吗

顺便说一句:我已经用WindowsPhone7.5Silverlight测试了相同的代码,它可以正常工作

谢谢你的帮助

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; 
    }
}
公共类MyListBox:ListBox
{
}
公共密封部分类空白页:第页
{
公共空白页()
{
this.InitializeComponent();
}
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
var-box1=新列表框();
box1.ItemsSource=新列表{new Object()};//工作正常
内容=框1;
var box2=新的MyListBox();
box2.ItemsSource=新列表{new Object()};//引发异常
内容=框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
this.myCollectionViewSource.Source=新列表{new Object()};//实际数据源

然而,这似乎只是推迟了问题的解决。至少对我来说是这样。在我的真实示例中,我使用ObservableVector作为数据源。一旦执行了ObservableVector集合的任何更改(例如Clear),我也会遇到灾难性的故障(0x8000FFFF)。只要我使用原始的ListView(不是我的子类版本),一切都会再次正常工作——就像您的情况一样。因此,我的回答不能理解为问题的解决方案,但也许这是一个值得尝试的暗示。在我的例子中,原始赋值工作正常,问题首先出现在可观察集合尝试更新之后。我尝试了ObservableCollection(应该在CP中工作,但在DP中不工作),但在那里我遇到了其他问题。如果您能在这条道路上取得任何进展,那将是一件很有趣的事情。

我相当肯定这是。啊,COM错误报告又回来了!你找到解决办法了吗?没有。正在等待Win8的下一个版本(RC),目前有太多的bug…Items.Add()和Items.RemoveAt()使用当前版本。不幸的是,我等不及下一个版本了是的,当调用
PropertyChanged
CollectionChanged
事件时,我也遇到了问题。。。目前,我停止了我的项目(或这个特定问题)的工作,我正在等待RC,该RC应在6月份可用。我还遇到了很多其他问题(DateTime/struct-type依赖属性不起作用,应用程序只在模拟器中工作-否则会话会崩溃,而打开xaml文件时会崩溃,弹出类会杀死包含控件中的绑定,…)我没有时间为所有这些构建解决方法…:)无论如何,谢谢你的回答。也许我会试一试,我明白。这很令人沮丧。我自己也在犹豫。然而,上一次我把希望寄托在DP->CP开关上,它并没有神奇地解决最紧迫的问题——我仍然需要构建变通方法——只有不同的方法;)希望RC体验会更加顺畅。事实上,DP->CP解决了许多问题(多个NotifyPropertyChanged/ObservableCollection/Vector mess)…我在windows phone 8.1 xaml(winrt)中也遇到了同样的问题。我制作了一个从Listview继承的控件,以便在滚动结束时添加更多的加载,除了用户在按下刷新按钮后快速按下列表(这将清除有界的ObservaleCollection并加载新数据)外,所有操作都正常。还要注意,当我使用普通列表视图时,它工作得很好。有什么建议吗?