void MakeDirty() { // called within syncroot if (!isDirty) { isDirty = true; if (parent != null) parent.MakeDirty(); } }
/// <summary> /// Retrieves a nested property container; creating a new one on demand. /// Multiple calls to this method will return the same instance (unless the entry at this key /// is overwritten by one of the Set-methods). /// Changes performed on the nested container will be persisted together with the parent container. /// </summary> public Properties NestedProperties(string key) { bool isNewContainer = false; Properties result; lock (syncRoot) { object oldValue; dict.TryGetValue(key, out oldValue); result = oldValue as Properties; if (result == null) { result = new Properties(this); dict[key] = result; result.MakeDirty(); } } if (isNewContainer) OnPropertyChanged(key); return result; }