如何在ItemCollection中查找具有特定属性的项目?

时间:2019-04-07 09:44:20

标签: c# wpf itemcollection

我有一个具有不同类型UserControl的ItemsCollection,需要确定是否有任何对象满足条件Any(p => p.GotFocus)。由于ItemsCollection未实现IEnumerable,因此可以将集合转换为某种类型,如Basic LINQ expression for an ItemCollection中所述,如下所示:

bool gotFocus = paragraphsItemControl.Items.Cast<ParagraphUserControl>().Any(p => p.GotFocus);

该集合由不同类型的UserControl组成(尽管每个类型都继承自同一父控件),因此如果我强制转换为特定类型,则会引发异常。 如何查询UserControl对象的集合?

1 个答案:

答案 0 :(得分:1)

使用OfType()代替Cast()

bool gotFocus = paragraphsItemControl.Items
     .OfType<ParagraphUserControl>().Any(p => p.GotFocus);

但是请注意,只会选中ParagraphUserControl类型的控件。

假设从ParentParent继承的所有控件都具有GotFocus属性,那么要检查所有控件,您可以执行以下操作:

bool gotFocus = paragraphsItemControl.Items
     .Cast<Parent>().Any(p => p.GotFocus);