2010-11-14 21 views
9

hoCome copiare raccolta osservabile

Observablecollection<A> aRef = new Observablecollection<A>(); 
bRef = aRef(); 

In questo caso, sia al punto stesso ObservableCollection ... Come faccio a fare una copia diversa?

risposta

16

fare questo:

// aRef being an Observablecollection 
Observablecollection<Entity> bRef = new Observablecollection<Entity>(aRef); 

Questo creerà una collezione osservabile ma le voci sono ancora indicando gli elementi originali. Se è necessario che gli elementi puntino a un clone anziché agli elementi originali, è necessario implementare e quindi chiamare un metodo di clonazione.

UPDATE

Se si tenta di aggiungere a una lista e poi la raccolta osservabile avere la lista originale, basta creare l'ObservableCollection passando la lista originale:

List<Entity> originalEnityList = GetThatOriginalEnityListFromSomewhere(); 
Observablecollection<Entity> bRef = new Observablecollection<Entity>(originalEnityList); 
+0

Grazie ... Ma il mio vero problema è che ho una collezione osservabile ... quando aggiungo un nuovo oggetto per it..it non viene riflessa nell'interfaccia utente. Quindi quello che sto facendo ora è copiare tutta la collezione in una collezione temperory ... quindi aggiungere un nuovo elemento alla collezione temporanea. Quindi riassegnare la raccolta temporanea. – Relativity

+0

Ho aggiornato. – Aliostad

+0

Ma ho una collezione osservabile come input. Cioè ... ho una collezione osservabile di 120 articoli .. Aggiungo un nuovo oggetto ad esso..ora ha 121 articoli ... Quindi l'interfaccia utente dovrebbe visualizzare 121 articoli – Relativity

5

si potrebbe implementare ICloneable interfaccia nella definizione dell'entità e quindi creare una copia di ObservableCollection con un cast interno. Di conseguenza avrai un clone List senza alcun riferimento ai vecchi articoli. Allora si potrebbe creare il nuovo ObservableCollection Pentecoste il clonato List

public class YourEntity : ICloneable { 
    public AnyType Property { get; set; } 
    .... 
    public object Clone() 
    { 
     return MemberwiseClone(); 
    } 
} 

L'implementazione sarebbe

var clonedList = originalObservableCollection.Select(objEntity => (YourEntity) objEntity.Clone()).ToList(); 

ObservableCollection<YourEntity> clonedCollection = new ObservableCollection<YourEntity>(clonedList); 
Problemi correlati