web-dev-qa-db-fra.com

Comment convertir une liste (Of T) en une ObservableCollection (Of T) dans VB.NET?

Existe-t-il un moyen de le faire sans parcourir la liste et ajouter les éléments à ObservableCollection?

19
Rob Sobers

Non, il n'y a aucun moyen de convertir directement la liste en une collection observable. Vous devez ajouter chaque élément à la collection. Cependant, un raccourci est fourni ci-dessous pour permettre au framework d’énumérer les valeurs et de les ajouter pour vous. 

Dim list as new List(of string)
...some stuff to fill the list...
Dim observable as new ObservableCollection(of string)(list)
38
Nescio

Je suis en retard mais je veux partager cette pièce intéressante pour convertir une liste en ObservableCollection si vous avez besoin d'une boucle:

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> coll)
{
    var c = new ObservableCollection<T>();
    foreach (var e in coll) c.Add(e);
    return c;
}

Vous pouvez transmettre une collection au constructeur ObservableCollection:

List<Product> myProds = ......
ObservableCollection<Product> oc = new ObservableCollection<Product>(myProds);

Maintenant, vous devez les traduire en VB.NET :)

18
Junior M
//Create an observable collection TObservable.

ObservableCollection (TObservable) =new ObservableCollection (TObservable)();

//Convert List items(OldListItems) to collection

OldListItems.ForEach(x => TObservable.Add(x));
3
Joby Mavelikara

pour clarifier ce que dit Junior (avec un exemple supplémentaire si vous utilisez LINQ qui renvoie un IEnumerable):

//Applications is an Observable Collection of Application in this example
List<Application> filteredApplications = 
      (Applications.Where( i => i.someBooleanDetail )).ToList();
Applications = new ObservableCollection<Application>( filteredApplications );
2
Jordan

Même si je suis en retard, je voudrais partager une amélioration rapide à la réponse de Junior : laissez le développeur définir la fonction de conversion utilisée pour convertir les objets de collection observables de la collection source en destination.

Comme ce qui suit:

public static ObservableCollection<TDest> ToObservableCollection<TDest, TSource>(this IEnumerable<TSource> coll, Func<TSource, TDest> converter)
    {
        var c = new ObservableCollection<TDest>();
        foreach (var e in coll)
        {
            c.Add(converter(e));
        }
        return c;
    }
1
trix
ObservableCollection<yourobjectname> result = new ObservableCollection<yourobjectname>(yourobjectlist);
0
Zin Min