WPF:Xaml,在.NET 4.0中创建一个可观察的对象集合(Observable Collection<Object>)

11

该网站上说你可以在.NET 4.0中实现

但我似乎无法做到,需要哪些程序集引用和xmlns命名空间呢?

以下方法不起作用

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

<coll:ObservableCollection x:TypeArguments="x:Object">
    <MenuItem Command="ApplicationCommands.Cut"/>
    <MenuItem Command="ApplicationCommands.Copy"/>
    <MenuItem Command="ApplicationCommands.Paste"/>
</coll:ObservableCollection>
2个回答

11

ObservableCollection<T> 定义在 System 程序集中,因此你的命名空间应该是:

xmlns:coll="clr-namespace:System.Collections.ObjectModel;assembly=System"
你可以在MSDN中找到这些信息,在页面顶部可以看到:

命名空间: System.Collections.ObjectModel
程序集: System (在 System.dll 中)
XAML 的 XMLNS: 没有映射到 xmlns。

请注意,程序集已经在 v3.5 和 v4.0 之间变化了。在 v3.5 中,它是在 WindowsBase 程序集中定义的。然而,这是一个缺点,因为你通常希望在没有任何 WPF 程序集引用的情况下使用该类。所以可能这就是为什么它们进行了更改。

此外,你也应该查看一下这篇博客文章,它说新的 XAML 功能在 VS 中尚未完全可用!


1
我尝试了这个,但是我得到了一个蓝色的波浪线,上面写着“命名空间“clr-namespace:System.Collections.ObjectModel;assembly=System”中不存在“ObservableCollection”的名称”。在代码中使用ObservableCollection确实可以工作。 - rabejens

11

在开发Windows Store应用时,我遇到了同样的问题。经过多次尝试后,我发现最简单的方法是在XAML中创建一个子类来定义这样的集合:

namespace my.name.space {
    public class ObservableMyObjectCollection: ObservableCollection<MyObject> {
    }
}

然后像这样使用它

<local:ObservableMyObjectCollection
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:my.name.space">

   <MenuItem Command="ApplicationCommands.Cut"/>
   <MenuItem Command="ApplicationCommands.Copy"/>
   <MenuItem Command="ApplicationCommands.Paste"/>

<local:ObservableMyObjectCollection>

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