迭代 CompositeCollection 的项目

Dud*_*udu 5 .net compositecollection

考虑代码:

\n\n
ObservableCollection<string> cities = new ObservableCollection<string>();\nObservableCollection<string> states = new ObservableCollection<string>();\n\nListBox list;\n\ncities.Add("Frederick");\ncities.Add("Germantown");\ncities.Add("Arlington");\ncities.Add("Burbank");\ncities.Add("Newton");\ncities.Add("Watertown");\ncities.Add("Pasadena");\n\nstates.Add("Maryland");\nstates.Add("Virginia");\nstates.Add("California");\nstates.Add("Nevada");\nstates.Add("Ohio");\n\nCompositeCollection cmpc = new CompositeCollection();\nCollectionContainer cc1 = new CollectionContainer();\nCollectionContainer cc2 = new CollectionContainer();\n\ncc1.Collection = cities;\ncc2.Collection = states;\n\ncmpc.Add(cc1);\ncmpc.Add(cc2);\n\nlist.ItemsSource = cmpc;\n\nforeach(var itm in cmpc)\n{\n    // itm is CollectionContainer and there are only two itm\xe2\x80\x99s\n    // I need the strings\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

虽然列表在 GUI 上显示了正确的数据

\n\n

我需要这些数据(不引用列表框)但我没有得到它

\n

Amr*_*awy 1

您应该从 cmpc 项目中提取数据并将它们设置为列表的数据源。ItemsSource 不会理解您需要将项目的内部项目设置为数据源
编辑

你可以使用这个方法

List<string> GetData(CompositeCollection cmpc)
        {
            List<string> allStrings = new List<string>();
            foreach (var item in cmpc)
            {
                allStrings.AddRange(item.OfType<string>());
            }
            return allStrings;
        }
Run Code Online (Sandbox Code Playgroud)

并设置数据源

list.ItemsSource = GetData(cmpc);
Run Code Online (Sandbox Code Playgroud)