http://www.devexpress.com/Support/Center/e/E689.aspx
using System;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.ExpressApp.Utils;
using DevExpress.ExpressApp.Model;
using DevExpress.ExpressApp.Editors;
using DevExpress.XtraEditors.Repository;
namespace WinSolution.Module.Win {
[PropertyEditor( typeof (System.Enum), true )]
public class EnumPropertyEditorEx : DevExpress.ExpressApp.Win.Editors.EnumPropertyEditor {
public EnumPropertyEditorEx(Type objectType, IModelMemberViewItem model)
: base (objectType, model) {
}
private bool TypeHasFlagsAttribute() {
return GetUnderlyingType().GetCustomAttributes( typeof (FlagsAttribute), true ).Length > 0 ;
}
protected override object CreateControlCore() {
CheckedComboBoxEdit checkedEdit = new CheckedComboBoxEdit();
checkedEdit.TextChanged += checkedEdit_TextChanged;
if (TypeHasFlagsAttribute())
return checkedEdit;
return base .CreateControlCore();
}
// Dennis: this code is needed to bypass a binding problem in the XtraEditors (S35490)
private void checkedEdit_TextChanged( object sender, EventArgs e) {
((CheckedComboBoxEdit)sender).RefreshEditValue();
}
protected override RepositoryItem CreateRepositoryItem() {
if (TypeHasFlagsAttribute())
return new RepositoryItemCheckedComboBoxEdit();
return base .CreateRepositoryItem();
}
protected override void SetupRepositoryItem(RepositoryItem item) {
base .SetupRepositoryItem(item);
if (TypeHasFlagsAttribute()) {
EnumDescriptor descriptor = new EnumDescriptor(GetUnderlyingType());
RepositoryItemCheckedComboBoxEdit checkedItem = ((RepositoryItemCheckedComboBoxEdit)item);
checkedItem.BeginUpdate();
checkedItem.Items.Clear();
checkedItem.SelectAllItemVisible = false ;
// Dennis: this is required to show localized items in the editor.
foreach ( object value in descriptor.Values)
checkedItem.Items.Add(value, descriptor.GetCaption(value), CheckState.Unchecked, true );
// Dennis: use this method if you don't to show localized items in the editor.
// checkedItem.SetFlags(GetUnderlyingType());
checkedItem.EndUpdate();
}
}
}
}