簡體   English   中英

ICustomTypeDescriptor,TypeDescriptionProvider,TypeConverter和UITypeEditor

[英]ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter, and UITypeEditor

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

有人可以告訴我這是對的,還是我錯過了任何重大概念或要點? 我真的只是想了解為什么以及何時使用每個班級。

ICustomTypeDescriptor

  • 在類中實現此接口會完全覆蓋類的本機屬性,並將其替換為ICustomTypeDescriptor.GetProperties()返回的PropertyDescriptors。

TypeDescriptionProvider

  • 用於擴展類的現有屬性
  • TypeDescriptionProvider通過TypeDescriptionProvider屬性附加到類
  • TypeDescriptionProvider的GetTypeDescriptor()方法返回要附加到該類型的現有屬性的ICustomTypeDescriptor。
  • PropertyGrid將顯示通過Reflection找到的類的屬性,以及通過TypeDescriptionProvider添加到類的屬性

類型轉換器

  • 在類型之間轉換
  • 在使用PropetyGrid方面,用於在可以在屬性網格中顯示/編輯的復雜類型和基元類型之間進行轉換。
  • TypeConverter的GetStandard值方法還可用於顯示propertygrid中可能值的列表

UITypeEditor的

  • 定義用於操作復雜類型屬性的自定義編輯器。
  • 通過屬性與屬性相關聯。

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

調整:

  • TypeDescriptionProvider

    • 仍然替換元數據(不擴展)
    • 也可以添加TypeDescriptor.AddProvider
    • 可以應用於每個類型以及每個實例,從而可以應用於列表而無需實現ITypedList
  • TypeConverter

    • 對於PropertyGrid ,這也是用於獲取元數據的機制; 請注意, ExpandableObjectConverter只是委托給TypeDescriptor.GetProperties ,但情況並非總是如此
    • 還負責通過更改重新創建不可變對象(如結構)
  • UITypeEditor

    • 還負責在PropertyGrid繪制預覽框

額外:

  • IExtenderProvider - 附加屬性; 這可能是你與TypeDescriptionProvider混淆的
  • ITypedList - 廣義上是ICustomTypeDescriptor的雙胞胎,但是對於列表; 可以通過在任何IList上使用TypeDescriptionProvider和非對象索引器來避免,即public T this[int index] {get;}
  • IListSource - 提供數據源和數據之間的間接; 例如, DataTable實現IListSource ,在請求時返回DefaultView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM