Windows应用商店应用中的IObservableVector <t>不能用作数据绑定源</t>

时间:2015-02-25 21:40:51

标签: c# wpf xaml windows-runtime windows-store-apps

我一直在关注developer guidelines from MS实施数据虚拟化,该虚拟化声明必须实施IObservableVector以实现随机访问数据虚拟化。

我在IObservableVector<T>,的只读异步实现中使用Reactive Extensions,我调用了AsyncReadOnlyVirtualCollection。

当我将GridView绑定到此IObservableVector<SomeConcreteType>的实例时,我在运行时遇到异常,由于与WinRT不兼容的类型,无法实例化该类型。 (无法为类型&#39; Windows.Foundation.Collections.IObservableVector`1 [Foo]&#39;计算GUID,因为实例化包含Windows运行时不支持的类型。)

如果我在早期博客上使用*object*而不是*SomeConcreteType*,时,当WinRT和XAML仍处于CTP状态且框架错误仍然存​​在时,则可行。鉴于它现在是2015年,我现在使用的是Windows 8.1,最新安装的Visual Studio 2013社区,我只能假设我必须犯某种错误。

为什么IObservableVector<ConcreteType>不能用作数据源,如果MS指南声明它必须用于这样的数据绑定?如果文档已过时,那么正确的方法是什么?

--- --- UPDATE 似乎抛出此错误的核心代码是{BO} MethodTable :: IsLegalNonArrayWinRTType()中的https://github.com/dotnet/coreclr/blob/d758145b547cc00aba3f0e3f101af27bf118e9af/src/vm/methodtable.cpp,它应用于上面的泛型类型ConcreteType或Object - -更多 - - 通过上面的GitHub WinRT coreclr代码攻击后,我看到有检查确保IObservableVector的通用类型与WinRT兼容。我不知道为什么现在这样......有人能开导我吗?

无论如何,为了遵守,我将具体类型移动到新的Windows运行时组件项目并添加了程序集引用,同时将后面的内容更改为

这现在&#34;工作&#34; (错误消失)...我现在有一个单独的问题:原始错误消失但是枚举器被迭代而不是索引器请求.....所以不是解决方案毕竟....但是为什么?


进一步更新 如果该类实现IObservableVector<object>而不是IObservabeVector<T>,则该类可以正常工作。我没有时间找出原因,但我怀疑它与无法将<T>投射到<object>有关...我将发布我的实施讨论Codeplex为我认为Rx方法可能很新颖。完成后我会在这里更新。

2 个答案:

答案 0 :(得分:0)

出于某种原因必须使用IObservableVector<object>。 有兴趣的是,这是在这种情况下使用Rx的实验 http://www.codeproject.com/Articles/995043/An-experiment-with-random-access-data-virtualisati

答案 1 :(得分:0)

你说你不能使用具体类型,那么你究竟使用什么类型? 根据{{​​3}},支持的类型是&#34;备注&#34;中列出的5种类型之一。部分。你的类型是否符合要求?