我很难通过TypeDescriptor获取有关对象索引器的信息-可以肯定的是,我的意思是:
class ComponentWithIndexer
{
public string this[int i]
{
get { return "hello"; }
}
}
由于您可以通过自定义Typedescriptor来影响WPF中的Binding,并且可以在WPF中与索引器绑定(bind)(例如
{Binding [12]
),因此我想知道有关Indexers的信息是否也可以通过Type描述符获得。那么,信息隐藏在哪里,如果没有隐藏在哪里,则针对索引器的WPF绑定(bind)如何工作?
最佳答案
简短的回答,不-您无法通过TypeDescriptor
获得索引器
更长的答案-为什么不能-深入到TypeDescriptor
mess-o-class的肠子中,有一个反射性的调用来聚合GetProperties
调用的属性。里面有这段代码:
for (int i = 0; i < properties.Length; i++)
{
PropertyInfo propInfo = properties[i];
if (propInfo.GetIndexParameters().Length <= 0)
{
MethodInfo getMethod = propInfo.GetGetMethod();
MethodInfo setMethod = propInfo.GetSetMethod();
string name = propInfo.Name;
if (getMethod != null)
{
sourceArray[length++] = new ReflectPropertyDescriptor(type, name, propInfo.PropertyType, propInfo, getMethod, setMethod, null);
}
}
}
重要的部分是检查0索引参数-如果它有一个索引器,它将跳过它。 :(