35

我想了解如何使用ICustomTypeDescriptor,TypeDescriptionProvider,TypeConverter和UITypeEditor來更改PropertyGrid顯示和接口與對象的方式。ICustomTypeDescriptor,TypeDescriptionProvider,TypeConverter和UITypeEditor

有人可以告訴我,如果這是正確的,或者如果我錯過了任何主要的概念或觀點?我真的只是想明白爲什麼以及何時使用每個班級。

ICustomTypeDescriptor

  • 在類實現此接口完全以覆蓋一類的天然性質,並用()由ICustomTypeDescriptor.GetProperties返回的PropertyDescriptor替換它們

TypeDescriptionProvider

  • 用於在
  • 甲TypeDescriptionProvider通過TypeDescriptionProvider屬性附加到一個類的類的現有屬性延伸
  • 的GetTypeDescriptor()的TypeDescriptionProvider的方法返回一個ICustomTypeDescriptor爲所附到現有的屬性的類型。
  • 甲PropertyGrid中會同時顯示通過反射發現類的屬性,以及屬性通過TypeDescriptionProvider

的TypeConverter

  • 類型之間進行轉換
  • 在術語添加到類使用PropetyGrid用於在可以在屬性網格中顯示/編輯的複雜類型和基本類型之間進行轉換。
  • 一個的TypeConverter的GetStandard值的方法,也可以用來顯示在PropertyGrid中

UITypeEditor的

  • 定義自定義編輯器用於操作複雜的性質可能值的列表類型。
  • 通過屬性與屬性關聯。

因此,ICustomTypeDescriptor是一個TypeDescription提供程序,用於添加/更改/替換對象的整個屬性。 TypeConverter和UITypeEditor應用於各個屬性並控制這些特定屬性的接口方式。

回答

36

調整菜譜方案:

  • TypeDescriptionProvider

    • 仍然取代元數據(未延伸)
    • 也可以加入是TypeDescriptor.AddProvider
    • 可以每類型可以應用以及每個實例,使其可以應用到列表而不必執行ITypedList
  • TypeConverter

    • PropertyGrid,這也是用於獲得元數據的機構;注意:ExpandableObjectConverter簡單地委託給TypeDescriptor.GetProperties,但是這並不總是與變化
  • UITypeEditor

    • 還負責案件
    • 還負責重新創建不可變對象(如結構)畫預覽框PropertyGrid

附加:

  • IExtenderProvider - 追加性能;這可能是你被混淆的東西TypeDescriptionProvider
  • ITypedList - 廣泛的雙胞胎ICustomTypeDescriptor,但列表;可以通過使用TypeDescriptionProvider和任何IList上的非對象索引器來避免,即,public T this[int index] {get;}
  • IListSource-提供數據源與數據之間的間接;例如,DataTable執行IListSource,當請求時返回DefaultView
相關問題