Raccolte e tipi di raccolte per XAMLCollections and Collection Types for XAML

In questo argomento viene descritto come definire le proprietà dei tipi che servono per supportare una raccolta e per supportare la sintassi XAML per creare un'istanza di elementi della raccolta come elementi figlio di un elemento oggetto padre o un elemento di proprietà.This topic describes how to define properties of types that are intended to support a collection, and to support the XAML syntax for instantiating collection items as element children of a parent object element or property element.

Concetti di raccolta XAMLXAML Collection Concepts

Concettualmente, tutte le relazioni nel codice XAML in cui sono presenti più elementi figlio all'interno dell'ambito di un elemento oggetto XAML o elemento proprietà XAML deve essere implementata come una raccolta.Conceptually, any relationship in XAML where there are multiple child items within the scope of a XAML object element or XAML property element must be implemented as a collection. Tale raccolta deve essere associata a una proprietà XAML specifica del tipo XAML che rappresenta l'elemento padre nella relazione.That collection must be associated with a particular XAML property of the XAML type that is the parent in that relationship. La proprietà deve essere una raccolta perché un processore XAML prevede di assegnare a ogni elemento nel markup per un elemento appena aggiunto il supporto della proprietà di raccolta.The property must be a collection because a XAML processor expects to assign each item in markup to be a newly added item of the backing collection property.

A livello di linguaggio XAML, i requisiti specifici di supporto delle raccolte non completamente definiti.At the XAML language level, the exact requirements of collection support are not fully defined. Il concetto che può essere una raccolta di un elenco o un dizionario (ma non entrambi) è definito a livello di linguaggio XAML, ma i tipi di supporto rappresentano entrambi gli elenchi o dizionari non è definito dal linguaggio XAML.The concept that a collection can be either a list or a dictionary(but not both) is defined at the XAML language level, but which backing types represent either lists or dictionaries is not defined by the XAML language.

Nei servizi XAML di .NET Framework, il concetto di supporto delle raccolte XAML viene definito in modo più chiaro in termini di tipi di supporto di .NET Framework.In .NET Framework XAML Services, the concept of XAML collection support is more clearly defined in terms of .NET Framework backing types. In particolare, il supporto XAML per raccolte si basa su diversi concetti di .NET Framework e le API che vengono utilizzate per elenchi e dizionari nella programmazione generale di .NET Framework.Specifically, the XAML support for collections is based on several .NET Framework concepts and APIs that are used for lists and dictionaries in general .NET Framework programming.

  1. Il IList interfaccia indica una raccolta di elenchi.The IList interface indicates a list collection.

  2. Il IDictionary interfaccia indica un insieme di dicionary.The IDictionary interface indicates a dicionary collection.

  3. Array rappresenta una matrice e una matrice supporta IList metodi.Array represents an array, and an array supports IList methods.

In ognuno di questi concetti di raccolta, un processore XAML dei servizi XAML di .NET Framework prevede di chiamare il Add metodo in un'istanza specifica del tipo della proprietà di raccolta.In each of these collection concepts, a .NET Framework XAML Services XAML processor expects to call the Add method on a specific instance of the collection property's type. In alternativa, in uno scenario di serializzazione, un processore XAML produce istanze di tipo XAML discrete per ogni elemento nell'elenco, dizionario o della matrice basata sul concetto di specifiche di ogni raccolta di "Elementi".Or, in a serialization scenario, a XAML processor produces discrete XAML-type instances for each item found in the list, dictionary or array based on each collection's specific concept of "Items". Questi sono: Item[Int32]; Item[Object]; esplicita IList.Item[Int32] per Array.These are : Item[Int32]; Item[Object]; the explicit IList.Item[Int32] for Array.

Raccolte genericheGeneric Collections

Raccolte generiche possono essere utile per la programmazione generale di .NET Framework e utilizzabili per le proprietà di raccolta XAML.Generic collections can be useful for general .NET Framework programming, and can also be used for XAML collection properties. Tuttavia, il generico interfacce IList<T> e IDictionary<TKey,TValue> non sono identificate dai processori XAML dei servizi XAML di .NET Framework equivalenti al non generico IList o IDictionary.However, the generic interfaces IList<T> and IDictionary<TKey,TValue> are not identified by .NET Framework XAML Services XAML processors as being equivalent to the non-generic IList or IDictionary. Anziché implementare le interfacce, un approccio consigliato per i tipi di proprietà di raccolta generica è derivano dalle classi List<T> o Dictionary<TKey,TValue>.Rather than implementing the interfaces, a recommended approach for generic collection property types is to derive from the classes List<T> or Dictionary<TKey,TValue>. Queste classi implementano le interfacce non generiche e pertanto includono il supporto previsto per le raccolte XAML nell'implementazione di base.These classes implement the non-generic interfaces and thus include the expected support for XAML collections in the base implementation.

Le raccolte di sola lettura e la logica di inizializzazioneRead-Only Collections and Initialization Logic

In .NET Framework di programmazione, è un modello di progettazione comune per qualsiasi proprietà che contiene un valore di un insieme come una raccolta di sola lettura.In .NET Framework programming, it is a common design pattern to make any property that holds a value of a collection as a read-only collection. Questo modello consente l'istanza che possiede la proprietà di raccolta per controllare meglio cosa accade alla raccolta...This pattern permits the instance that owns the collection property to better control what happens to the collection.. In particolare, il modello impedisce la sostituzione accidentale dell'intera raccolta di pre-esistente impostando la proprietà.Specifically, the pattern prevents accidental replacement of the entire pre-existing collection by setting the property. In questo modello, qualsiasi accesso alla raccolta da parte dei chiamanti invece prevedere chiamando metodi o proprietà supportata dal tipo di raccolta e/o le interfacce di raccolta rilevanti, ad esempio IList.In this pattern, any access to the collection by callers should instead be made by calling methods or properties as supported by the collection type and/or the relevant collection interfaces such as IList.

Mediante questo pattern implica che qualsiasi classe che espone una proprietà della raccolta di sola lettura prima di tutto necessario inizializzare tale proprietà per contenere una raccolta vuota.Using this pattern implies that any class that exposes a read-only collection property must first initialize that property to hold an empty collection. In genere l'inizializzazione viene eseguita come parte del comportamento della costruzione della classe.Typically the initialization is performed as part of the construction behavior for the class. Per essere utile per XAML, è importante che tale logica viene sempre fatto riferimento dal costruttore predefinito, poiché XAML è in genere chiama il costruttore predefinito prima di elaborare le proprietà (proprietà della raccolta o in caso contrario).To be useful for XAML, it is important that such logic is always referenced by the default constructor, because XAML generally calls the default constructor prior to processing the properties (collection properties or otherwise).

Raccolte e supporto di sistema di tipo XAMLXAML Type System Support and Collections

Oltre il meccanismo di base per l'analisi XAML e la compilazione o la serializzazione delle proprietà della raccolta, il sistema di tipi XAML implementati nei servizi XAML di .NET Framework include diverse funzionalità di progettazione relativi alle raccolte in XAML.Beyond the basic mechanics of parsing XAML and populating or serializing collection properties, the XAML type system as implemented in .NET Framework XAML Services includes several design features that pertain to collections in XAML.

  1. IsCollection Restituisce true se il tipo XAML viene eseguito da un tipo che fornisce supporto delle raccolte XAML.IsCollection returns true if the XAML type is backed by a type that provides XAML collection support.

  2. IsDictionary e IsArray può identificare ulteriormente la modalità di raccolta supporta il tipo XAML.IsDictionary and IsArray can further identify which collection mode the XAML type supports. Per XAML personalizzato processori che si basano su servizi XAML di .NET Framework e il codice XAML, sistema di tipi ma non basato su esistente XamlWriter implementazioni di conoscere la modalità di raccolta utilizzata potrebbe essere necessario per sapere quale metodo da richiamare per elaborazione della raccolta.For custom XAML processors that are based on .NET Framework XAML Services and the XAML type system but not based on existing XamlWriter implementations, knowing which collection mode is used might be necessary in order to know which method to invoke for collection processing.

  3. Ognuno dei valori di proprietà precedente sono potenzialmente influenzate dalle sostituzioni di LookupCollectionKind su un tipo XAML.Each of the previous property values are potentially influenced by overrides of LookupCollectionKind on a XAML type.