我的测试集合设置如下:
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中选择数据,然后将其发送回原始程序集进一步的使用。
答案 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>
。