AbstractConverter.cs 862 B

1234567891011121314151617181920212223242526272829
  1. using System.Globalization;
  2. using Avalonia.Data.Converters;
  3. using CommunityToolkit.Mvvm.ComponentModel;
  4. namespace InABox.Avalonia.Converters;
  5. public abstract class AbstractConverter<TIn, TOut> : ObservableObject, IValueConverter
  6. {
  7. protected abstract TOut? Convert(TIn? value, object? parameter = null);
  8. protected virtual TIn? Deconvert(TOut? value, object? parameter = null)
  9. {
  10. return default;
  11. }
  12. public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
  13. {
  14. var typed = value is TIn tin ? tin : default;
  15. return Convert(typed, parameter);
  16. }
  17. public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
  18. {
  19. var typed = value is TOut tout ? tout : default;
  20. return Deconvert(typed, parameter);
  21. }
  22. }