【发布时间】:2010-09-19 14:45:43
【问题描述】:
有没有办法做到这一点,而无需遍历 List 并将项目添加到 ObservableCollection?
【问题讨论】:
标签: vb.net collections list
有没有办法做到这一点,而无需遍历 List 并将项目添加到 ObservableCollection?
【问题讨论】:
标签: vb.net collections list
尽管我迟到了,但我想分享一个对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;
}
【讨论】:
澄清 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 );
【讨论】:
ObservableCollection<yourobjectname> result = new ObservableCollection<yourobjectname>(yourobjectlist);
【讨论】:
//Create an observable collection TObservable.
ObservableCollection (TObservable) =new ObservableCollection (TObservable)();
//Convert List items(OldListItems) to collection
OldListItems.ForEach(x => TObservable.Add(x));
【讨论】:
我迟到了,但如果你需要循环,我想分享这个有趣的片段,用于将列表转换为 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 :)
【讨论】:
不,没有办法直接将列表转换为可观察的集合。您必须将每个项目添加到集合中。但是,下面是允许框架枚举值并为您添加它们的快捷方式。
Dim list as new List(of string)
...some stuff to fill the list...
Dim observable as new ObservableCollection(of string)(list)
【讨论】: