propertygrid中的列舉顯示為中文
在系統開發中,經常會使用propertygrid來修改或者展示某個物件的屬性,如果類中定義了列舉,在展現的時候缺省會展示列舉的項或者列舉值,但是這並不是我們想要的。使用者使用的時候並不清楚該項代表的意思。之前介紹過列舉顯示中文的一篇文章,大家可以看下,列舉顯示中文。
效果如下圖:
在propertygrid中列舉顯示中,又比較複雜一些。propertygrid顯示複雜屬性需要typeconverter,也就是乙個轉換器,可以對其進行設定,顯示我們想要的格式、內容。現有技術propertygrid列舉顯示中文,有一些利用了繫結自定義控制項,有一些繫結自定義的ilist物件。但是,每個列舉都要建立自己的typeconverter,如果在架構設計中,一般都是分層實現,這樣的橫跨直接影響了分層結構,破壞系統的原本。有沒有一種更好的辦法來實現呢?本文也就這一問題進行了研究。
在typeconverter中對列舉型別進行轉換,但是這個typeconverter針對的所有的列舉物件,所有的列舉轉換器都可以採用此介面,在列舉顯示的時候呼叫typeconverter,通過反射獲得相對應的列舉描述。這樣所有的列舉就只定義乙個typeconverter。也就解決上述問題。
具體事例:
1、定義列舉:在列舉中加入描述資訊,作為我們需要顯示的資訊
public enum pkgenerator
}
2、定義typeconverter,對列舉和選擇進行轉換
/// /// 列舉轉換器
/// 用此類之前,必須保證在列舉項中定義了description
///
public class enumconverter : expandableobjectconverter
/// /// 載入列舉項集合
///
///
private void loaddic(itypedescriptorcontext context)
/// /// 是否可從**轉換
///
///
///
///
public override bool canconvertfrom(itypedescriptorcontext context, type sourcetype)
/// /// 從**轉換
///
///
///
///
///
public override object convertfrom(itypedescriptorcontext context, system.globalization.cultureinfo culture, object value)}}
}}return base.convertfrom(context, culture, value);
}/// /// 是否可轉換
///
///
///
///
public override bool canconvertto(itypedescriptorcontext context, type destinationtype)
/// ///
///
///
///
public override bool getstandardvaluessupported(itypedescriptorcontext context)
/// ///
///
///
///
public override bool getstandardvalue***clusive(itypedescriptorcontext context)
/// ///
///
///
///
public override standardvaluescollection getstandardvalues(itypedescriptorcontext context)
/// ///
///
///
///
///
///
///
public override object convertto(itypedescriptorcontext context, system.globalization.cultureinfo culture, object value, type destinationtype)
//}//return "error!";
//繫結控制項
// fieldinfo fieldinfo = value.gettype().getfield(value.tostring());
//object objs = fieldinfo.getcustomattributes(typeof(system.componentmodel.descriptionattribute), false);
//if (objs == null || objs.length == 0)
////else
//if (dic.count <= 0)
loaddic(context);
foreach (object key in dic.keys)
}return base.convertto(context, culture, value, destinationtype);
}/// /// 記載列舉的值+描述
///
///
///
public dictionarygetenumvaluedesdic(type enumtype)}}
return dic;}}
3、屬性使用typeconverter:
public class entitykey
}
具體效果如下圖:
PropertyGrid中的屬性讀取
public class basesettings settingfilename is a file whose extension is xml private string settingfilename else xml name public basesettings string set...
WPF中實現PropertyGrid的三種方式
由於wpf中沒有提供propertygrid控制項,有些業務需要此類的控制項。這篇文章介紹在wpf中實現propertygrid的三種方式,三種方式都是俺平時使用時總結出來的。第一種方式 使用windowsform的propertygrid控制項。用過wpf的童鞋都曉得,可以通過windowsfor...
PropertyGrid 繫結動態的屬性與值的集合
建立下面3個類 xprop 就是使用者將具體使用的屬性。propertygrid 很炫的一點就是屬性的定製可以有很大的自由度。在這裡,給出一種最最簡單的形式,屬性包括 name 和 value 兩個部分,在 propertygrid 的屬性視窗中,name 將代表左邊的屬性名稱,value 將代表右...