2013-07-19 26 views
6

Tôi gặp một thời gian khó thu thập thông tin về indexer của một đối tượng thông qua TypeDescriptor - chỉ để chắc chắn, tôi có nghĩa là loại điều:Người lập chỉ mục của một đối tượng có thể truy cập được bằng TypeDescriptor của nó không?

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

Vì bạn có thể ảnh hưởng đến Binding trong WPF với tùy Typedescriptors và kể từ khi bạn có thể liên kết với các chỉ mục trong WPF (ví dụ: {Binding [12]) Tôi đã tự hỏi liệu thông tin về Indexers cũng có sẵn thông qua một bộ mô tả kiểu. Vì vậy, nơi nào các thông tin ẩn, và nếu nó không ẩn ở đó, làm thế nào để WPF ràng buộc chống lại các chỉ mục làm việc?

Trả lời

4

Câu trả lời ngắn, không có - bạn có thể không nhận được tại indexers qua TypeDescriptor

Còn câu trả lời - tại sao bạn không thể - trong sâu thẳm trong lòng của TypeDescriptor lộn xộn-o-lớp, có cuộc gọi phản chiếu đến các thuộc tính tổng hợp cho cuộc gọi GetProperties. Có mã này:

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

Phần quan trọng là kiểm tra 0 tham số chỉ mục - nếu có chỉ mục, nó bỏ qua nó. :(

+0

buồn ... Tôi cho rằng Ràng buộc với người lập chỉ mục phải là loại hack nào đó vì bộ mô tả kiểu không thể cung cấp thông tin. – flq

+0

@flq có thể - Tôi phải đi đào xung quanh để xác nhận, nhưng nó là lý do – JerKimball

Các vấn đề liên quan