/// <summary>
/// Clears the <see cref="IsDirty"/> on all childs.
/// </summary>
/// <param name="obj">The object.</param>
/// <param name="handledReferences">The already handled references, required to prevent circular stackoverflows.</param>
private static void ClearIsDirtyOnAllChilds(object obj, HashSet <IModel> handledReferences)
{
var objAsModelBase = obj as ModelBase;
var objAsIEnumerable = obj as IEnumerable;
if (objAsModelBase != null)
{
if (handledReferences.Contains(objAsModelBase))
{
return;
}
objAsModelBase.IsDirty = false;
handledReferences.Add(objAsModelBase);
var catelTypeInfo = PropertyDataManager.GetCatelTypeInfo(obj.GetType());
foreach (var property in catelTypeInfo.GetCatelProperties())
{
object value = objAsModelBase.GetValue(property.Value);
ClearIsDirtyOnAllChilds(value, handledReferences);
}
}
else if (objAsIEnumerable != null)
{
foreach (var childItem in objAsIEnumerable)
{
if (childItem is ModelBase)
{
ClearIsDirtyOnAllChilds(childItem, handledReferences);
}
}
}
}