我一直在关注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方法可能很新颖。完成后我会在这里更新。
答案 0 :(得分:0)
出于某种原因必须使用IObservableVector<object>
。
有兴趣的是,这是在这种情况下使用Rx的实验
http://www.codeproject.com/Articles/995043/An-experiment-with-random-access-data-virtualisati
答案 1 :(得分:0)
你说你不能使用具体类型,那么你究竟使用什么类型? 根据{{3}},支持的类型是&#34;备注&#34;中列出的5种类型之一。部分。你的类型是否符合要求?