PropertyEditorBase.cs 1.1 KB

123456789101112131415161718192021222324252627
  1. using System.Windows;
  2. using System.Windows.Data;
  3. namespace HandyControl.Controls;
  4. public abstract class PropertyEditorBase : DependencyObject
  5. {
  6. public abstract FrameworkElement CreateElement(PropertyItem propertyItem);
  7. public virtual void CreateBinding(PropertyItem propertyItem, DependencyObject element) =>
  8. BindingOperations.SetBinding(element, GetDependencyProperty(),
  9. new Binding($"{propertyItem.PropertyName}")
  10. {
  11. Source = propertyItem.Value,
  12. Mode = GetBindingMode(propertyItem),
  13. UpdateSourceTrigger = GetUpdateSourceTrigger(propertyItem),
  14. Converter = GetConverter(propertyItem)
  15. });
  16. public abstract DependencyProperty GetDependencyProperty();
  17. public virtual BindingMode GetBindingMode(PropertyItem propertyItem) => propertyItem.IsReadOnly ? BindingMode.OneWay : BindingMode.TwoWay;
  18. public virtual UpdateSourceTrigger GetUpdateSourceTrigger(PropertyItem propertyItem) => UpdateSourceTrigger.PropertyChanged;
  19. protected virtual IValueConverter GetConverter(PropertyItem propertyItem) => null;
  20. }