Em artigos anteriores falamos de Como usar uma PropertyGrid para criar uma interface para as definições e também de DataGrid editável e um ObservableDictionary. Agora vamos fazer uso de ambos os conceitos e criar um DataGridEditor
para ser usado na PropertyGrid do Extended WPF Toolkit.
Fazer um DataGridEditor
Há várias formas de criar um editor para uma PropertyGrid. Neste caso vamos implementar a interface ITypeEditor
.
public class DataGridEditor : ITypeEditor
{
public FrameworkElement ResolveEditor(PropertyItem propertyItem)
{
var grid = new DataGrid();
grid.MaxHeight = 400;
var button = new DropDownButton();
button.Content = "(Collection)";
button.DropDownContent = grid;
button.IsTabStop = true;
button.MinHeight = 22;
button.SnapsToDevicePixels = true;
button.Background = Brushes.White;
button.BorderThickness = new Thickness(0);
button.Padding = new Thickness(2, 0, 0, 0);
button.HorizontalAlignment = HorizontalAlignment.Left;
button.VerticalAlignment = VerticalAlignment.Center;
var _binding = new Binding("Value");
_binding.Source = propertyItem;
_binding.ValidatesOnExceptions = true;
_binding.ValidatesOnDataErrors = true;
_binding.Mode = propertyItem.IsReadOnly ? BindingMode.OneWay : BindingMode.TwoWay;
BindingOperations.SetBinding(button.DropDownContent as DataGrid, DataGrid.ItemsSourceProperty, _binding);
return button;
}
}
Bastante simples. Apenas criamos uma DataGrid e colocamo-la como o conteúdo de um DropDownButton. Personalizei as propriedades às minhas necessidades.
Definam o editor para a propriedade
Podem especificar o editor usando um atributo na propriedade.
[Category("General settings")]
[DisplayName("Countries")]
[Editor(typeof(DataGridEditor), typeof(DataGridEditor))]
public ObservablePairCollection<string, string> Countries { get; set; }
Resultado final
Usar uma DataGrid numa PropertyGrid: