通过WPF树视图itemscollection递归检查各种转换为null

时间:2012-02-03 18:59:49

标签: c# wpf collections casting treeview

我正在通过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 /检查它是什么类型的?我只想要一个所有叶节点的简单列表!

0 个答案:

没有答案