如何在wpf中将List<T>转换为ObservableCollection<T>?

21

我正在使用WPF,有一个通用列表:List。 现在我希望将其转换为通用可观察集合:ObservableCollection。

我知道我可以遍历列表并将每个单独的项添加到可观察集合中。 但是,对我来说似乎必须有一种内置的方法来完成这个操作。


2
可能是 https://dev59.com/BWox5IYBdhLWcg3wpF35 的重复问题。 - Nitesh
这是内置的方式吗?http://msdn.microsoft.com/en-us/library/ms653202.aspx - tukaef
1
没有办法将类型转换为不兼容的类型,即使有这样的方式,当你尝试使用它时,你的程序也会崩溃。 - Display Name
4个回答

58

如果你只想从一个List创建一个ObservableCollection,那么你需要做的就是:

ObservableCollection<MyType> obsCollection = new ObservableCollection<MyType>(myList);

问题在于它会尝试浅克隆 myList。为了避免这种情况,可以对 myList 进行 foreach 并将其添加到 obsCollection 中,这样引用就相同了。 - Pratik Ghag

2
var _oc = new ObservableCollection<ObjectType>(_listObjects);

2

ObservableCollection有针对IEnumerable<T>的构造函数。ObservableCollection

ObservableCollection<yourType> observable = 
        new ObservableCollection<yourType>(yourListObject);

1
你可以使用扩展方法来实现。
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;
}

或者你可以使用这个constructor。元素被复制到ObservableCollection中的顺序与列表枚举器读取它们的顺序相同。

ObservableCollection<YourObject> collection = new ObservableCollection<YourObject>(yourList);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接