【问题标题】:How to declare ObservableCollection namespace in xaml如何在 xaml 中声明 ObservableCollection 命名空间
【发布时间】:2013-11-19 14:12:39
【问题描述】:

我想通过 xaml 在 Net 4.5 中使用 ObservableCollection 类。

这就是我在 xaml 中指定命名空间的方式:

xmlns:coll="clr-namespace:System.Collections.ObjectModel;assembly=System"

而集合声明是这样的:

<ic:MyControl.Resources>
    <coll:ObservableCollection x:TypeArguments="commands:Command" x:Key="CommandCollection"/>
</ic:MyControl.Resources>

我得到这个编译错误:

XML 命名空间中不存在标记“ObservableCollection” 'clr-namespace:System.Collections.ObjectModel;assembly=System'。

我认为程序集名称可能不正确,但是在这里的论坛上搜索说它是系统程序集。谁能告诉我怎么回事?

【问题讨论】:

  • 如果您在将被编译为 Baml 的 WPF 控件中声明它,那么您将被 Xaml2006 语言规范困住,并且您不能在除根元素之外的任何地方使用 x:TypeArguments。 Xaml2009 允许它在任何地方使用,但您只能将 Xaml2009 用于在运行时手动加载的 Xaml 文件。
  • ObservableCollection&lt;T&gt; 保留在视图中还有什么意义?您的代码出了点问题。

标签: c# wpf xaml


【解决方案1】:

来自ObservableCollection documentation on MSDN 中的备注部分:

XAML 使用注意事项

ObservableCollection 可用作 XAML 对象元素 Windows Presentation Foundation (WPF),版本 3.0 和 3.5。 但是,使用有很大的局限性。

...

使用 ObservableCollection 功能的更直接的方法 从应用程序中的 XAML 是声明您自己的非泛型自定义 派生自 ObservableCollection 的集合类,以及 将其限制为特定类型。然后映射包含 此类,并将其作为 XAML 中的对象元素引用。

【讨论】:

    【解决方案2】:

    我同意楼上的回答。但是,您可以走得更远,只需将您的集合公开为资源中的 CollectionViewSource 并绑定到该资源,然后将源集合作为 ViewModel 中的 ObservableCollection。 CollectionViewSource 的详细信息可以在这里找到。

    CollectionViewSource

    【讨论】:

      猜你喜欢
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多