Я использую Xceed Extended WPF Toolkit для отображения перечисления с атрибутом [Flags]
в PropertyGrid
.
[Flags]
public enum TestEnum
{
Test1 = 1,
Test2 = 2,
Test3 = 4,
Test4 = 8,
Test5 = 16,
Test6 = 32,
Test7 = 64,
}
Поскольку я не могу знать определение перечисления во время компиляции, я бы динамически создал перечисление, используя EnumBuilder.
Я создал редактор для отображения перечисления как CheckComboBox
:
public class CheckComboBoxEditor : TypeEditor<CheckComboBox>, ITypeEditor
{
protected override void SetValueDependencyProperty()
{
ValueProperty = CheckComboBox.SelectedValueProperty;
}
protected override CheckComboBox CreateEditor()
{
return new CheckComboBox();
}
protected override void ResolveValueBinding(PropertyItem propertyItem)
{
var _binding = new Binding("Value");
_binding.Source = propertyItem;
_binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
_binding.Mode = BindingMode.TwoWay;
_binding.Converter = CreateValueConverter();
BindingOperations.SetBinding(Editor, CheckComboBox.SelectedValueProperty, _binding);
var _binding2 = new Binding("Value");
_binding2.Source = propertyItem;
_binding2.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
_binding2.Mode = BindingMode.TwoWay;
_binding2.Converter = CreateValueConverter();
BindingOperations.SetBinding(Editor, CheckComboBox.SelectedItemProperty, _binding2);
Editor.ItemsSource = Enum.GetValues(propertyItem.Value.GetType());
}
}
Как видите, до сих пор я пытался связать свойства SelectedValue
и SelectedItem
. CreateValueConverter()
определяется в базовом классе и возвращает null
.
Это хорошо работает, если я выбираю некоторые значения в поле и нажимаю кнопку «Сохранить» - в моей модели я получаю правильное значение перечисления. Но это не работает в другом направлении — если я устанавливаю любое значение перечисления (с флагами или без них) для своего свойства, все значения не проверяются, а область содержимого пусто.
У вас есть идея решить эту проблему?