2013-07-19 9 views
6

Mam twardy czas uzyskania informacji o indekser obiektu za pośrednictwem TypeDescriptor - tak aby mieć pewność, mam na myśli coś takiego:Czy Indexer obiektu jest jakoś dostępny za pośrednictwem jego TypeDescriptor?

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

Ponieważ można wpływać Wiązanie w WPF z dostosowywania Typedescriptors i ponieważ możesz wiązać się z indeksatorami w WPF (np. {Binding [12]) Zastanawiałem się, czy informacje na temat Indexerów są również dostępne poprzez deskryptor typu. Skąd informacje są ukrywane, a jeśli się tam nie ukrywają, w jaki sposób działa powiązanie WPF z indeksami?

Odpowiedz

4

Krótka odpowiedź, nie - nie można dostać w indeksujących poprzez TypeDescriptor

Dłuższa odpowiedź - dlaczego nie można - głęboko w trzewiach Mess-o-klas TypeDescriptor istnieje wywołanie odblaskowe do zagregowanych właściwości dla wywołania GetProperties. Tam jest ten kod:

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

Ważną częścią jest sprawdzenie parametrów na 0 Główna - jeśli to ma podziałowe, pomija go. :(

+0

smutny ... Przypuszczam, że Wiązanie z indeksowaniem musi być jakimś hackerem, ponieważ deskryptor nie może podać informacji .. – flq

+0

@flq możliwe - musiałbym kopać, aby potwierdzić, ale ma to uzasadnienie – JerKimball

Powiązane problemy