Я повторяюсь в коллекции элементов дерева 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 проверяет, что это за тип?Я просто хочу простой список всех листовых узлов!