webentwicklung-frage-antwort-db.com.de

Wie konvertiere ich eine Liste (Of T) in eine ObservableCollection (Of T) in VB.NET?

Gibt es eine Möglichkeit, dies zu tun, ohne die Liste zu durchlaufen und die Elemente der ObservableCollection hinzuzufügen?

19
Rob Sobers

Nein, es gibt keine Möglichkeit, die Liste direkt in eine beobachtbare Sammlung umzuwandeln. Sie müssen jedes Element zur Sammlung hinzufügen. Nachfolgend finden Sie jedoch eine Verknüpfung, mit der das Framework die Werte auflisten und für Sie hinzufügen kann. 

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

Ich bin spät dran, aber ich möchte dieses interessante Stück teilen, um eine Liste in eine ObservableCollection umzuwandeln, wenn Sie eine Schleife benötigen:

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;
}

Sie können eine Sammlung an den ObservableCollection-Konstruktor übergeben:

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

Jetzt müssen Sie diese in VB.NET übersetzen :)

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

um zu klären, was Junior sagt (mit einem hinzugefügten Beispiel, wenn Sie LINQ verwenden, das ein IEnumerable zurückgibt):

//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

Obwohl ich zu spät komme, möchte ich eine kurze Verbesserung der Antwort von Junior geben: Lassen Sie den Entwickler die Konvertierungsfunktion definieren, mit der beobachtbare Sammlungsobjekte aus der Quellensammlung in die Zielsammlung konvertiert werden.

Wie das Folgende:

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