2010-04-23 19 views
7

the web site dice che si può in .NET 4.0WPF: XAML, creare una collezione osservabile <object> in XAML in .NET 4.0

I cant sembrano farlo però, che cosa assesmbly riferimenti e xmlns' ho bisogno

quanto segue non funziona

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> 

risposta

11

ObservableCollection<T> è definito nel sistema assemblaggio , così lo spazio dei nomi dovrebbe leggere:

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

È possibile trovare le informazioni in MSDN in alto dove si dice:

Namespace: System.Collections.ObjectModel
Assembly: sistema (in System.dll)
XMLNS per XAML: Non mappato a un xmlns.

Si noti che l'assembly è cambiato tra v3.5 e v4.0. In v3.5 è stato definito nell'assembly di WindowsBase. Tuttavia, questo era uno svantaggio dal momento che spesso si desidera utilizzare la classe senza alcun riferimento a gruppi WPF. Quindi forse è per questo che l'hanno cambiato.

Inoltre, si dovrebbe anche controllare this blog post, che dice che le nuove funzionalità XAML non sono ancora completamente disponibili in VS!

9

Mi rendo conto che si tratta di una vecchia domanda, ma mi sono imbattuto nello stesso problema mentre lavoravo a un'app di Windows Store. Dopo vari problemi che ho capito, che il più facile perché per definire una tale raccolta in XAML è semplicemente creare una sottoclasse:

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

e quindi utilizzarlo in questo modo

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