有没有办法将可观察的集合转换为常规集合?

时间:2010-07-02 17:11:55

标签: c# wpf observablecollection

我的测试集合设置如下:

ObservableCollection<Person> MyselectedPeople = new ObservableCollection<Person>();

public MainWindow()
    {
       InitializeComponent();
       FillData();
    }

public void FillData()
    {
        Person p1 = new Person();
        p1.NameFirst = "John";
        p1.NameLast = "Doe";
        p1.Address = "123 Main Street";
        p1.City = "Wilmington";
        p1.DOBTimeStamp = DateTime.Parse("04/12/1968").Date;
        p1.EyeColor = "Blue";
        p1.Height = "601";
        p1.HairColor = "BRN";

        MyselectedPeople.Add(p1);
    }

一旦我构建了这个集合,我希望能够将Observable Collection转换为List类型。

这背后的原因是我的主要项目是接收带有数据的通用列表,我必须将其转换为Observable集合,以便在gridview,listboxes等中使用。在UI中选择数据,然后将其发送回原始程序集进一步的使用。

5 个答案:

答案 0 :(得分:10)

我认为最快的方法是使用LINQ。

 List<Person> personList= MySelectedPeople.ToList(); 

干杯。

答案 1 :(得分:8)

尝试以下

var list = MyselectedPeople.ToList();

确保将System.Linq作为您的使用陈述之一。

答案 2 :(得分:5)

应该这样做......

List<Person> myList = MyselectedPeople.ToList<Person>();

答案 3 :(得分:5)

我只是想指出,除了明显的Linq扩展方法之外,List总是有一个需要IEnumerable<T>的重载

return new List<Person>(MyselectedPeople);

答案 4 :(得分:2)

奇怪的是,您的后端程序集被编码为仅接受List<T>。这是非常严格的限制,并且阻止您执行有用的操作,例如传递数组,ObservableCollection<T>Collection<T>ReadOnlyCollection<T>,或Dictionary<TKey, TValue>的键或值属性1}},或者其他任何类似列表的东西。

如果可能,请更改后端程序集以接受IList<T>。然后,您可以按原样传递ObservableCollection<T>,而无需将其内容复制到List<T>

相关问题