DependencyPropertyHelper.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System;
  2. #if XFORMS
  3. using Xamarin.Forms;
  4. using DependencyProperty = Xamarin.Forms.BindableProperty;
  5. #elif WinRT
  6. using Windows.UI.Xaml;
  7. #else
  8. using System.Windows;
  9. #endif
  10. namespace Caliburn.Micro
  11. {
  12. /// <summary>
  13. /// Class that abstracts the differences in creating a DepedencyProperty / BindableProperty on the different platforms.
  14. /// </summary>
  15. public static class DependencyPropertyHelper
  16. {
  17. /// <summary>
  18. /// Register an attached dependency / bindable property
  19. /// </summary>
  20. /// <param name="name">The property name</param>
  21. /// <param name="propertyType">The property type</param>
  22. /// <param name="ownerType">The owner type</param>
  23. /// <param name="defaultValue">The default value</param>
  24. /// <param name="propertyChangedCallback">Callback to executed on property changed</param>
  25. /// <returns>The registred attached dependecy property</returns>
  26. public static DependencyProperty RegisterAttached(string name, Type propertyType, Type ownerType, object defaultValue = null, PropertyChangedCallback propertyChangedCallback = null) {
  27. #if XFORMS
  28. return DependencyProperty.CreateAttached(name, propertyType, ownerType, defaultValue, propertyChanged: (obj, oldValue, newValue) => {
  29. if (propertyChangedCallback != null)
  30. propertyChangedCallback(obj, new DependencyPropertyChangedEventArgs(newValue, oldValue, null));
  31. });
  32. #else
  33. return DependencyProperty.RegisterAttached(name, propertyType, ownerType, new PropertyMetadata(defaultValue, propertyChangedCallback));
  34. #endif
  35. }
  36. /// <summary>
  37. /// Register a dependency / bindable property
  38. /// </summary>
  39. /// <param name="name">The property name</param>
  40. /// <param name="propertyType">The property type</param>
  41. /// <param name="ownerType">The owner type</param>
  42. /// <param name="defaultValue">The default value</param>
  43. /// <param name="propertyChangedCallback">Callback to executed on property changed</param>
  44. /// <returns>The registred dependecy property</returns>
  45. public static DependencyProperty Register(string name, Type propertyType, Type ownerType, object defaultValue = null, PropertyChangedCallback propertyChangedCallback = null)
  46. {
  47. #if XFORMS
  48. return DependencyProperty.Create(name, propertyType, ownerType, defaultValue, propertyChanged: (obj, oldValue, newValue) =>
  49. {
  50. if (propertyChangedCallback != null)
  51. propertyChangedCallback(obj, new DependencyPropertyChangedEventArgs(newValue, oldValue, null));
  52. });
  53. #else
  54. return DependencyProperty.Register(name, propertyType, ownerType, new PropertyMetadata(defaultValue, propertyChangedCallback));
  55. #endif
  56. }
  57. }
  58. }