UtilityConverter.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Globalization;
  5. using System.Runtime.CompilerServices;
  6. using Xamarin.Forms;
  7. namespace InABox.Mobile
  8. {
  9. public class UtilityConverterEventArgs : EventArgs
  10. {
  11. public object Value { get; private set; }
  12. public object Parameter { get; private set; }
  13. public UtilityConverterEventArgs(object value, object parameter)
  14. {
  15. Value = value;
  16. Parameter = parameter;
  17. }
  18. }
  19. public delegate void UtilityCoverterEvent(object sender, UtilityConverterEventArgs args);
  20. public abstract class UtilityConverter<TIn, TOut> : IValueConverter
  21. {
  22. public event UtilityCoverterEvent Converting;
  23. public event UtilityCoverterEvent Deconverting;
  24. protected abstract TOut Convert(TIn value);
  25. protected virtual TIn Deconvert(TOut value)
  26. {
  27. return default;
  28. }
  29. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  30. {
  31. var typed = value is TIn tin ? tin : default;
  32. Converting?.Invoke(this,new UtilityConverterEventArgs(typed, parameter));
  33. return Convert(typed);
  34. }
  35. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  36. {
  37. var typed = value is TOut tout ? tout : default;
  38. Deconverting?.Invoke(this,new UtilityConverterEventArgs(typed, parameter));
  39. return Deconvert(typed);
  40. }
  41. }
  42. }