6

我很难通过 TypeDescriptor 获取有关对象索引器的信息 - 可以肯定的是,我的意思是这样的事情:

class ComponentWithIndexer
{
    public string this[int i]
    {
        get { return "hello"; }
    }
}

由于您可以通过自定义Typedescriptors来影响 WPF 中的绑定,并且您可以绑定到 WPF 中的索引器(例如{Binding [12]),所以我想知道有关索引器的信息是否也可以通过类型描述符获得。那么,信息隐藏在哪里,如果它不隐藏在那里,针对索引器的 WPF 绑定如何工作?

4

1 回答 1

4

简短的回答,不-您无法通过索引器获取TypeDescriptor

更长的答案 -为什么你不能 - 在TypeDescriptormess-o-classes 的深处,有一个反射调用来聚合调用的属性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 索引参数 - 如果它有一个索引器,它会跳过它。:(

于 2013-07-19T19:32:22.417 回答