DetailShell.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System;
  2. using System.Linq.Expressions;
  3. using System.Runtime.CompilerServices;
  4. using InABox.Core;
  5. namespace comal.timesheets
  6. {
  7. public abstract class DetailShell<TParent, TEntity> : Shell<TParent, TEntity>
  8. where TParent : IDetailModel
  9. where TEntity : Entity, IRemotable, IPersistent, new()
  10. {
  11. public TEntity Entity { get; private set; }
  12. protected override void RowChanged()
  13. {
  14. base.RowChanged();
  15. Entity = Row.ToObject<TEntity>();
  16. }
  17. protected override T Get<T>([CallerMemberName] string property = null)
  18. {
  19. if (Entity != null)
  20. {
  21. return (T)CoreUtils.GetPropertyValue(
  22. Entity,
  23. CoreUtils.GetFullPropertyName(Columns[property], ".")
  24. );
  25. }
  26. return base.Get<T>(property);
  27. }
  28. protected override void Set<T>(T value, bool notify = true, [CallerMemberName] string property = null)
  29. {
  30. if (Entity == null)
  31. Entity = Row.ToObject<TEntity>();
  32. CoreUtils.SetPropertyValue(
  33. Entity,
  34. CoreUtils.GetFullPropertyName(Columns[property], "."),
  35. value
  36. );
  37. base.Set(value,notify,property);
  38. }
  39. }
  40. }