2013-07-19 10 views
6

Sto avendo un momento difficile ottenere informazioni su indicizzatore di un oggetto attraverso il TypeDescriptor - solo per essere sicuri, voglio dire una cosa del genere:L'indicizzatore di un oggetto è in qualche modo accessibile tramite il suo TypeDescriptor?

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

Dato che è possibile influenzare Binding in WPF con personalizzazione Typedescriptors e poiché è possibile eseguire il binding agli indicizzatori in WPF (ad esempio {Binding [12]), mi chiedevo se le informazioni sugli indicizzatori siano disponibili anche tramite un descrittore di tipi. Quindi, dove nasconde l'informazione, e se non si nasconde lì, come funziona il binding di WPF contro gli indicizzatori?

risposta

4

Risposta breve, no - non si può ottenere presso gli indicizzatori tramite TypeDescriptor

Longer risposta - perché non è possibile - in fondo nelle viscere delle TypeDescriptor mess-o-classi, c'è la chiamata riflessiva per aggregare le proprietà per la chiamata GetProperties. In c'è questo codice:

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); 
     } 
    } 
} 

La parte importante è il controllo per 0 parametri indice - se ha un indicizzatore, si salta esso. :(

+0

triste ... Suppongo che legare a indicizzatore deve essere una sorta di hack come il descrittore di tipo non può dare le informazioni. – flq

+0

@flq possibilmente - dovrei andare a scavare intorno per confermare, ma è ragionevole – JerKimball

Problemi correlati