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

3

我想在使用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>

我得到了这个编译错误:
“ObservableCollection”标签在XML命名空间“clr-namespace:System.Collections.ObjectModel;assembly=System”中不存在。
我认为程序集名称可能不正确,但是在这里的论坛上进行搜索说明它是System程序集。有人能告诉我出了什么问题吗?

你有没有查看过https://dev59.com/fnE85IYBdhLWcg3wnUwd? - ígor
如果您在将其编译为Baml的WPF控件中声明此内容,则必须遵循Xaml2006语言规范,并且只能在根元素中使用x:TypeArguments。Xaml2009允许在任何地方使用它,但您只能在运行时手动加载的Xaml文件中使用Xaml2009。 - Mike Strobel
在视图中保留ObservableCollection<T>的意义是什么?而且还放在视图的资源中?你的代码出了些问题。 - Dennis
2个回答

3

MSDN上的ObservableCollection文档中的备注部分

XAML使用注意事项

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

...

一个更简单的使用ObservableCollection并在应用程序中从XAML声明的方法是声明自己的非泛型自定义集合类,该类派生自ObservableCollection,并将其约束为特定类型。然后映射包含此类的程序集,并将其作为对象元素在XAML中引用。


0
我同意上面的答案。然而,你可以更进一步,只需将你的集合作为CollectionViewSource公开在资源中,并绑定到它,然后在你的ViewModel中将源集合设置为ObservableCollection。关于CollectionViewSource的详细信息可以在这里找到。
CollectionViewSource的详细信息请参考CollectionViewSource

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接