рекурсивный просмотр коллекции элементов дерева WPF, проверяющий различные приведения на нуль - PullRequest
0 голосов
/ 03 февраля 2012

Я повторяюсь в коллекции элементов дерева WPF и проверяю различные типы приведения на нуль - скажите, пожалуйста, есть ли менее грязный способ

Вот рекурсивная функция, которая у меня есть в настоящее время.Пожалуйста, обратите внимание, что это работает, но мне кажется, что я сделал это очень долго, и должно быть гораздо более простым или простым способом, включающим намного меньше приведения и проверки на null:

    private void RecurseAddingPVIs(ICollection<ProductVersionImplementation> outputCollection, ICollection targetCollection)
    {
        foreach (object item in targetCollection)
        {
            ProductVersionImplementation pviItem = item as ProductVersionImplementation;
            if (pviItem != null)
            {
                outputCollection.Add(pviItem);
            }
            else
            {
                TreeViewItem treeViewItem =
                    item as TreeViewItem;
                if (treeViewItem != null)
                {
                    if (treeViewItem.HasItems)
                    {
                        RecurseAddingPVIs(outputCollection, treeViewItem.Items);
                    }
                }
                else
                {
                    CollectionViewGroup collectionViewGroup = item as CollectionViewGroup;
                    if (collectionViewGroup != null)
                    {
                        if(collectionViewGroup.ItemCount > 0)
                        {
                            RecurseAddingPVIs(outputCollection, collectionViewGroup.Items);
                        }
                    }
                }
            }
        }
    }

Где ProductVersionImplementation - это вывод, который я хочу, а именно, очень простой класс, содержащий (как вы уже догадались) три свойства string для хранения Product, Version и реализации.

Древовидное представление было изменено таким образом, чтобы можно было выбирать несколько элементов одновременно, и для него настраивались иерархические шаблоны данных с ItemsSource, привязанным к свойству Groups ICollectionView, которое создается путем добавления GroupDescription s для обоих Productи версия.Это работает довольно хорошо, поскольку древовидная структура сначала группируется по Product, затем по Version, а затем по конкретной реализации, и моя конечная цель - получить простой List, из которых ProductVersionImplementation s выбран, поскольку свойство SelectedItems по сути является коллекциейTreeViewItems.

В итоге и (мы надеемся) игнорирование расширений TreeView, есть ли лучший способ просмотреть коллекцию, которая может содержать различные типы (некоторые из которых также являются коллекциями различных сортов)это если if / else проверяет, что это за тип?Я просто хочу простой список всех листовых узлов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...