AbstractConverter.cs 987 B

1234567891011121314151617181920212223242526272829303132333435
  1. #nullable enable
  2. using System;
  3. using System.ComponentModel;
  4. using System.Globalization;
  5. using InABox.Core;
  6. using JetBrains.Annotations;
  7. using Xamarin.Forms;
  8. namespace InABox.Mobile
  9. {
  10. public abstract class AbstractConverter<TIn, TOut> : BindableObject, IValueConverter
  11. {
  12. protected abstract TOut? Convert(TIn? value, object? parameter = null);
  13. protected virtual TIn? Deconvert(TOut? value, object? parameter = null)
  14. {
  15. return default;
  16. }
  17. public object? Convert(object value, Type targetType, object parameter, CultureInfo culture)
  18. {
  19. var typed = value is TIn tin ? tin : default;
  20. return Convert(typed, parameter);
  21. }
  22. public object? ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  23. {
  24. var typed = value is TOut tout ? tout : default;
  25. return Deconvert(typed, parameter);
  26. }
  27. }
  28. }