web-dev-qa-db-ja.com

VB.NETでList(Of T)をObservableCollection(Of T)に変換するにはどうすればよいですか?

リストを反復処理せずに項目をObservableCollectionに追加せずにこれを行う方法はありますか?

20
Rob Sobers

いいえ、リストを監視可能なコレクションに直接変換する方法はありません。各アイテムをコレクションに追加する必要があります。ただし、以下は、フレームワークが値を列挙して追加できるようにするショートカットです。

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

遅いですが、ループが必要な場合は、リストをObservableCollectionに変換するためのこの興味深い部分を共有したいと思います。

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

コレクションをObservableCollectionコンストラクターに渡すことができます。

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

これらを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

juniorの発言を明確にする(IEnumerableを返すLINQを使用している場合は追加の例を使用):

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

私は遅れていますが、 Junior の答えを簡単に拡張したいと思います。開発者が監視可能なコレクションオブジェクトをソースコレクションから宛先コレクションに変換するために使用するコンバーター関数を定義できるようにします。

次のように:

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