2010-11-14 35 views

Répondre

16

Faites ceci:

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

Cela va créer une collection observable mais les éléments sont toujours en pointant vers les articles originaux. Si vous avez besoin des éléments pour pointer un clone plutôt que les éléments d'origine, vous devez implémenter puis appeler une méthode de clonage.

MISE À JOUR

Si vous essayez d'ajouter à une liste, puis la collection observable ont la liste initiale, il suffit de créer le ObservableCollection en passant la liste originale:

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

Merci ... Mais mon vrai problème est que j'ai une collection observable ... quand j'ajouter un nouveau item .. it ne se reflète pas dans l'interface utilisateur. Donc ce que je fais maintenant est de copier toute la collection dans une collection tempérée ... puis d'ajouter un nouvel objet à la collection temporaire. Ensuite, attribuez de nouveau la collection temporaire. – Relativity

+0

J'ai mis à jour. – Aliostad

+0

Mais j'ai collection observable en entrée. C'est à dire .... J'ai une collection observable de 120 articles..J'ajoute un nouvel élément .. maintenant il a 121 articles ... Puis l'interface utilisateur devrait afficher 121 articles – Relativity

5

Vous pourriez mettre en œuvre ICloneable interfacez dans votre définition d'entité, puis faites une copie du ObservableCollection avec une conversion interne. En conséquence, vous aurez un clone List sans aucune référence aux anciens éléments. Ensuite, vous pouvez créer votre nouveau ObservableCollection Whit la clonées List

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

La mise en œuvre serait

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

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