如何在xaml中声明ObservableCollection命名空间

时间:2013-11-19 14:12:39

标签: c# wpf xaml

我想使用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-名称空间:System.Collections.ObjectModel;装配=系统'。

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

2 个答案:

答案 0 :(得分:2)

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

  

关于XAML使用的注意事项

     

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

     

...

     

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

答案 1 :(得分:0)

我同意上面的答案。但是,您可以更进一步,只需将您的集合公开为资源中的CollectionViewSource并绑定到该集合,然后将您的源集合作为ViewModel中的ObservableCollection。可以在此处找到CollectionViewSource的详细信息。

CollectionViewSource