#nullable enable using System; using System.ComponentModel; using System.Globalization; using InABox.Core; using JetBrains.Annotations; using Xamarin.Forms; namespace InABox.Mobile { public abstract class AbstractConverter : BindableObject, IValueConverter { protected abstract TOut? Convert(TIn? value, object? parameter = null); protected virtual TIn? Deconvert(TOut? value, object? parameter = null) { return default; } public object? Convert(object value, Type targetType, object parameter, CultureInfo culture) { var typed = value is TIn tin ? tin : default; return Convert(typed, parameter); } public object? ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { var typed = value is TOut tout ? tout : default; return Deconvert(typed, parameter); } } }