我有一个绑定到Equin.ApplicationFramework
的'DataGridView'的'BindingListView View'。根据文档的过滤方式为:
View.ApplyFilter(
delegate (SomeViewModel item)
{
return item.Code == textBox1.Text;
}
);
我需要一个过滤器方法,无论item.Code == 'SomeText'
中的项目类型如何,都可以过滤BindingListView
,有什么方法可以实现?我想出了
View.ApplyFilter(
delegate (object item)
{
return item.GetType().GetProperty("Code").GetValue(item).ToString() == textBox1.Text;
}
);
不幸的是,它不起作用。我收到编译器错误:
无法将匿名方法转换为类型的“委托”,因为它不是 委托人类型
我也尝试了解决方法here,但没有成功。
答案 0 :(得分:1)
该方法似乎需要一个Predicate<T>
。您是否尝试过使用谓词语法?
View.ApplyFilter(i => (string)i.GetType().GetProperty("Code").GetValue(i) == "SomeText")
或者,使所有类都实现一个公共接口并使用该接口访问Code
是一个更好的设计。如果无法使用反射,则应至少为每个不同的类型缓存PropertyInfo
,因为查询类型信息非常慢。