首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历CompositeCollection的项

遍历CompositeCollection的项
EN

Stack Overflow用户
提问于 2010-06-09 17:56:16
回答 3查看 1.3K关注 0票数 5

考虑下面的代码:

代码语言:javascript
复制
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),但是我没有得到它

EN

回答 3

Stack Overflow用户

发布于 2010-06-09 18:43:44

试试这个:foreach (var itm in cmpc.Cast<CollectionContainer>().SelectMany(x => x.Collection.Cast<string>()))

票数 4
EN

Stack Overflow用户

发布于 2014-01-09 19:21:57

ListBox将集合的默认视图用于其ItemsSource属性,您也可以使用该视图:

代码语言:javascript
复制
  foreach (string itm in CollectionViewSource.GetDefaultView(cmpc))
  {
    Debug.Print(itm);
  }

您可以使用ICollectionView类对ItemsSource进行排序或过滤,但是要小心,因为这样做不能在CompositeCollection中正常工作,因为您可以看到这个问题:How to handle a CompositeCollection with CollectionView features?

票数 2
EN

Stack Overflow用户

发布于 2010-06-09 18:38:55

您应该从cmpc项中提取数据并将其设置为数据源,因为list.ItemsSource不会理解您需要将项的内部项设置为数据源

编辑

您可以使用此方法

代码语言:javascript
复制
List<string> GetData(CompositeCollection cmpc)
        {
            List<string> allStrings = new List<string>();
            foreach (var item in cmpc)
            {
                allStrings.AddRange(item.OfType<string>());
            }
            return allStrings;
        }

并设置数据源

代码语言:javascript
复制
list.ItemsSource = GetData(cmpc);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3004725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档