2013-07-19 2 views
6

私がTypeDescriptorを通じて、オブジェクトのインデクサについての情報を得るに苦労しています - 私はそういったことを意味し、念のために:あなたはTypedescriptorsをカスタマイズしてWPFにバインド影響を与えることができるのでオブジェクトのインデクサーは、そのTypeDescriptorで何とかアクセスできますか?

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

をし、あなたがWPFのインデクサーにバインドできるので(例えば{Binding [12])、インデクサーに関する情報がタイプ記述子を介して利用可能かどうか疑問に思っていました。 したがって、情報はどこに隠れていますか?そこに隠れていない場合、インデクサーに対するWPFバインディングはどのように機能しますか?

答えて

4

短い答えは、ノー - あなたはTypeDescriptor

長い答えを経由してインデクサで取得することはできません - なぜすることはできません - 深いダウンTypeDescriptor混乱-O-クラスの腸であり、 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インデックスパラメータのチェックがある重要な部分 - それはインデクサーを持っている場合、それをスキップします。 :

+0

sad ...私は、インデクサーへのバインディングは、タイプ記述子が情報を与えることができないような何らかの種類のハックでなければならないと考えています。 – flq

+0

@flqおそらく - 私は確認するために掘り進む必要がありますが、 – JerKimball

関連する問題