[英]WPF Datagrid.ItemsSource as List<Anything> and use on Linq
我搜索了10多個小時。
在其他窗口中有10個類和1個數據網格
datagrid1.ItemsSource = new List<class1>(); //+100 items in list
or
datagrid1.ItemsSource = new List<class2>(); //+100 items in list
or
datagrid1.ItemsSource = new List<class3>(); //+100 items in list
我需要轉換並使用Linq中的退貨項目:
var items = datagrid1.ItemsSource as List<???>;
datagrid1.ItemsSource = items.Where(a => a.GetType().GetProperty("Name").GetValue(a, null).ToString().Contains("text"));
我正在使用這些。 但不起作用
using System.Linq;
var items = datagrid1.ItemsSource as IList;
//Error CS1061 'IList' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument of type 'IList' could be found (are you missing a using directive or an assembly reference?)
var items = datagrid1.ItemsSource as List<dynamic>; // return null
var items = datagrid1.ItemsSource as List<object>; // return null
我應該用什么東西代替? 尋求支持Linq?
注意:我不會使用class1或class2或class3
Linq擴展可用於通用枚舉( IEnumerable<>
), IList
是IEnumerable
,因此這些擴展將IList
用於IList
。
由於List<DerivedClass>
不是List<BaseClass>
,諸如datagrid1.ItemsSource as List<object>
返回null
,您可以在以下問題中閱讀更多內容:
您可以解決調用Cast <>擴展(可用於IEnumerable
)的問題,此擴展將可枚舉項目投影到新的IEnumerable<>
將每個元素轉換為指定的通用類型:
datagrid1.ItemsSource.Cast<object>().Where(...)
但是,如果您的類具有公共類或接口,並且IEnumerable<>
是協變的,則可以嘗試如下操作:
interface INamedObject
{
string Name { get; }
}
var items = datagrid1.ItemsSource as IEnumerable<INamedObject>;
datagrid1.ItemsSource = items.Where(a => a.Contains("text"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.