public DirtifiableObject(params string[] derivedProperties)
        {
            _dirtySubject = new Subject <bool>();
            _dirtySubject.ToProperty(this, x => x.IsDirty, out _dirty);

            _monitored = new Dictionary <DirtifiableObject, IDisposable>();

            var excludes = derivedProperties.Concat(new[] { "IsDirty" }).ToArray();

            DataChanged = Changed.Where(e => !excludes.Contains(e.PropertyName));
            DataChanged.Subscribe(_ => MarkDirty());

            Dirtied = _dirtySubject.Where(x => x).Select(_ => Unit.Default);
        }