【问题标题】:IObservableVector<T> in Windows Store apps cannot be used as databinding sourceWindows 应用商店应用程序中的 IObservableVector<T> 不能用作数据绑定源
【发布时间】:2015-02-25 21:40:50
【问题描述】:

我一直在关注developer guidelines from MS 来实现数据虚拟化,其中指出必须为随机访问数据虚拟化实现 IObservableVector。

我在 IObservableVector&lt;T&gt;, 的只读异步实现中使用响应式扩展,我称之为 AsyncReadOnlyVirtualCollection。

当我将 GridView 绑定到此 IObservableVector&lt;SomeConcreteType&gt; 的实例时,我会在运行时收到一个异常,即由于类型与 WinRT 不兼容而无法实例化该类型。 (无法计算类型“Windows.Foundation.Collections.IObservableVector`1[Foo]”的 GUID,因为实例化包含 Windows 运行时不支持的类型。)

如果我使用*object* 而不是*SomeConcreteType*,,这是在WinRT 和XAML 仍处于CTP 中并且仍然存在框架错误时在早期博客中所建议的,那么这可行。鉴于现在是 2015 年,我现在使用的是 Windows 8.1,并安装了最新的 Visual Studio 2013 社区,我只能假设我一定犯了某种错误。

如果 MS 指南声明它必须用于此类数据绑定,为什么不能将 IObservableVector&lt;ConcreteType&gt; 用作数据源?如果文档已过期,正确的方法是什么?

---更新--- 似乎引发此错误的核心代码在方法 BOOL MethodTable::IsLegalNonArrayWinRTType() 中的https://github.com/dotnet/coreclr/blob/d758145b547cc00aba3f0e3f101af27bf118e9af/src/vm/methodtable.cpp,该方法应用于上面的泛型类型 ConcreteType 或 Object - -更多的 - - 好的,通过上面的 GitHub WinRT coreclr 代码破解后,我看到有检查以确保 IObservableVector 的泛型类型与 WinRT 兼容。我现在不知道为什么会这样......有人可以启发我吗?

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

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


进一步更新 如果该类实现IObservableVector&lt;object&gt; 而不是IObservabeVector&lt;T&gt;,则该类有效。我没有时间找出原因,但我怀疑这与无法将 &lt;T&gt; 转换为 &lt;object&gt; 有关...我将在 Codeplex 上发布我的实现以供讨论,因为我认为 Rx 方法是可能很新颖。完成后我会在这里更新。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你说你不能使用具体类型,那么你到底使用的是什么类型? 根据https://msdn.microsoft.com/en-us/library/hh441570%28v=vs.120%29.aspx,支持的类型是“备注”部分中列出的 5 种类型之一。你的类型符合吗?

      【讨论】:

      • 我现在明白了这个问题并亲自体验了。当您使用 Platform::Collections::Vector 时,您可以使用任何符合要求的类型。如果您决定在自己的类中实现 IObservableVector,那么它只有在您转换为 IObservableVector<:object>^...时才有效。我也不知道为什么会这样,但它也让我很困扰。
      • 是的...看看下面的链接,我设法在一个使用 Rx 的演示项目中完成了所有工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多