Existe-t-il un moyen de le faire sans parcourir la liste et ajouter les éléments à ObservableCollection?
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)
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 :)
//Create an observable collection TObservable.
ObservableCollection (TObservable) =new ObservableCollection (TObservable)();
//Convert List items(OldListItems) to collection
OldListItems.ForEach(x => TObservable.Add(x));
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 );
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;
}
ObservableCollection<yourobjectname> result = new ObservableCollection<yourobjectname>(yourobjectlist);