我正在通过WPF树视图itemscollection进行递归并检查各种强制类型转换 - 请告诉我是否有一个不那么混乱的方式
这是我目前的递归函数。请注意,它确实有效,但我觉得我已经完成了很长一段时间,应该是一个更容易或更简单的方法,包括更少的投射和检查{{1 }}:
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
绑定到ItemsSource
的“组”属性,该属性是通过添加创建的产品和版本均为ICollectionView
。这很好用,因为树视图首先按产品分类,然后是版本,然后是特定的实现,我的最终目标是获得一个简单的GroupDescription
,其中List
被选中,因为SelectedItems属性本质上是TreeViewItems的集合。
总结和(希望)忽略ProductVersionImplementation
的扩展,是否有更好的方法来浏览可能包含各种类型(其中一些也是各种类型的集合)的集合,而不是这种类型的if /检查它是什么类型的?我只想要一个所有叶节点的简单列表!