EnclosedEntity.cs 996 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using System;
  2. using System.Linq;
  3. namespace InABox.Core
  4. {
  5. public interface IEnclosedEntity
  6. {
  7. }
  8. public abstract class EnclosedEntity : BaseObject, IEnclosedEntity
  9. {
  10. private Func<BaseObject>? _linkedentity;
  11. [DoNotSerialize]
  12. protected BaseObject? LinkedEntity() => _linkedentity?.Invoke();
  13. //[Obsolete("Please supply linked Entity")]
  14. public EnclosedEntity()
  15. {
  16. }
  17. public EnclosedEntity(Func<BaseObject>? entity)
  18. {
  19. _linkedentity = entity;
  20. }
  21. protected override void DoPropertyChanged(string name, object before, object after)
  22. {
  23. var le = LinkedEntity();
  24. if (IsObserving() && le != null)
  25. {
  26. var link = LinkedProperties.Find(le, this).FirstOrDefault(x => x.Source.Equals(name));
  27. if (link != null)
  28. link.Update(this, le);
  29. }
  30. }
  31. }
  32. }