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); }