using System.Windows; using System.Windows.Data; namespace HandyControl.Controls; public abstract class PropertyEditorBase : DependencyObject { public abstract FrameworkElement CreateElement(PropertyItem propertyItem); public virtual void CreateBinding(PropertyItem propertyItem, DependencyObject element) => BindingOperations.SetBinding(element, GetDependencyProperty(), new Binding($"{propertyItem.PropertyName}") { Source = propertyItem.Value, Mode = GetBindingMode(propertyItem), UpdateSourceTrigger = GetUpdateSourceTrigger(propertyItem), Converter = GetConverter(propertyItem) }); public abstract DependencyProperty GetDependencyProperty(); public virtual BindingMode GetBindingMode(PropertyItem propertyItem) => propertyItem.IsReadOnly ? BindingMode.OneWay : BindingMode.TwoWay; public virtual UpdateSourceTrigger GetUpdateSourceTrigger(PropertyItem propertyItem) => UpdateSourceTrigger.PropertyChanged; protected virtual IValueConverter GetConverter(PropertyItem propertyItem) => null; }