PageRenderTime 39ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/Main/src/DynamicDataDisplay/Converters/GenericValueConverter.cs

#
C# | 62 lines | 44 code | 10 blank | 8 comment | 5 complexity | c52768995c5b434d832f2c13c4249b37 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows.Data;
  6. using System.Globalization;
  7. namespace Microsoft.Research.DynamicDataDisplay.Converters
  8. {
  9. /// <summary>
  10. /// Represents a typed value converter. It simplifies life of its sub-class as there no need to
  11. /// check what types arguments have.
  12. /// </summary>
  13. /// <typeparam name="T"></typeparam>
  14. public class GenericValueConverter<T> : IValueConverter
  15. {
  16. /// <summary>
  17. /// Initializes a new instance of the <see cref="GenericValueConverter&lt;T&gt;"/> class.
  18. /// </summary>
  19. public GenericValueConverter() { }
  20. private Func<T, object> conversion;
  21. public GenericValueConverter(Func<T, object> conversion)
  22. {
  23. if (conversion == null)
  24. throw new ArgumentNullException("conversion");
  25. this.conversion = conversion;
  26. }
  27. #region IValueConverter Members
  28. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  29. {
  30. if (value is T)
  31. {
  32. T genericValue = (T)value;
  33. object result = ConvertCore(genericValue, targetType, parameter, culture);
  34. return result;
  35. }
  36. return null;
  37. }
  38. public virtual object ConvertCore(T value, Type targetType, object parameter, CultureInfo culture)
  39. {
  40. if (conversion != null)
  41. {
  42. return conversion(value);
  43. }
  44. throw new NotImplementedException();
  45. }
  46. public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  47. {
  48. throw new NotSupportedException();
  49. }
  50. #endregion
  51. }
  52. }