考虑下面的代码:
ObservableCollection<string> cities = new ObservableCollection<string>();
ObservableCollection<string> states = new ObservableCollection<string>();
ListBox list;
cities.Add("Frederick");
cities.Add("Germantown");
cities.Add("Arlington");
cities.Add("Burbank");
cities.Add("Newton");
cities.Add("Watertown");
cities.Add("Pasadena");
states.Add("Maryland");
states.Add("Virginia");
states.Add("California");
states.Add("Nevada");
states.Add("Ohio");
CompositeCollection cmpc = new CompositeCollection();
CollectionContainer cc1 = new CollectionContainer();
CollectionContainer cc2 = new CollectionContainer();
cc1.Collection = cities;
cc2.Collection = states;
cmpc.Add(cc1);
cmpc.Add(cc2);
list.ItemsSource = cmpc;
foreach(var itm in cmpc)
{
// itm is CollectionContainer and there are only two itm’s
// I need the strings
}而list在GUI上显示正确的数据
我需要这个数据(不引用ListBox),但是我没有得到它
发布于 2010-06-09 18:43:44
试试这个:foreach (var itm in cmpc.Cast<CollectionContainer>().SelectMany(x => x.Collection.Cast<string>()))
发布于 2014-01-09 19:21:57
ListBox将集合的默认视图用于其ItemsSource属性,您也可以使用该视图:
foreach (string itm in CollectionViewSource.GetDefaultView(cmpc))
{
Debug.Print(itm);
}您可以使用ICollectionView类对ItemsSource进行排序或过滤,但是要小心,因为这样做不能在CompositeCollection中正常工作,因为您可以看到这个问题:How to handle a CompositeCollection with CollectionView features?
发布于 2010-06-09 18:38:55
您应该从cmpc项中提取数据并将其设置为数据源,因为list.ItemsSource不会理解您需要将项的内部项设置为数据源
编辑
您可以使用此方法
List<string> GetData(CompositeCollection cmpc)
{
List<string> allStrings = new List<string>();
foreach (var item in cmpc)
{
allStrings.AddRange(item.OfType<string>());
}
return allStrings;
}并设置数据源
list.ItemsSource = GetData(cmpc);https://stackoverflow.com/questions/3004725
复制相似问题