2010-04-23 2 views
7

the web site sagt, Sie können in .NET 4.0WPF: XAML, erstellen eine beobachtbare Sammlung <object> in XAML in .NET 4.0

Ich kann es scheinen, obwohl zu tun, was assesmbly Referenzen und xmlns' benötige ich

folgendes funktioniert nicht

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> 

Antwort

11

ObservableCollection<T> definiert ist, in der -System Montage, so sollten Sie Ihre Namespace lesen:

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

Sie diese Informationen in MSDN an der Spitze finden, wo es heißt:

Namespace: System.Collections.ObjectModel
Montage: System (in System.dll)
XMLNS für XAML: Nicht zu einem Xmlns zugeordnet.

Beachten Sie, dass die Baugruppe zwischen v3.5 und v4.0 gewechselt hat. In Version 3.5 wurde es in der WindowsBase-Assembly definiert. Dies war jedoch ein Nachteil, da Sie die Klasse häufig ohne referenzierte WPF-Assemblies verwenden möchten. Vielleicht haben sie das deshalb geändert.

Darüber hinaus sollten Sie auch überprüfen, this blog post, die besagt, dass die neuen XAML-Funktionen sind noch nicht vollständig in VS verfügbar!

9

Ich weiß, dass dies eine alte Frage ist, aber ich habe gerade das gleiche Problem bei der Arbeit an einer Windows Store App gefunden. Nach einigen Problemen habe ich herausgefunden, dass die einfachste, warum eine solche Sammlung zu definieren, in XAML eine Unterklasse erstellen Sie einfach ist:

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

Und es dann wie so

<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> 
verwenden