private void UninitializeModelInternal(string modelProperty, object model, ModelCleanUpMode modelCleanUpMode)
{
if (model != null)
{
ViewModelManager.UnregisterModel(this, model);
}
if (_modelErrorInfo.ContainsKey(modelProperty))
{
var modelErrorInfo = _modelErrorInfo[modelProperty];
modelErrorInfo.Updated -= OnModelErrorInfoUpdated;
modelErrorInfo.CleanUp();
_modelErrorInfo.Remove(modelProperty);
}
if (SupportIEditableObject)
{
var modelInfo = _modelObjectsInfo[modelProperty];
if (modelInfo.SupportIEditableObject)
{
switch (modelCleanUpMode)
{
case ModelCleanUpMode.CancelEdit:
try
{
modelInfo.IsCanceling = true;
EditableObjectHelper.CancelEditObject(model);
}
catch (Exception ex)
{
Log.Warning(ex, "Failed to cancel the edit of object for model '{0}'", modelProperty);
}
finally
{
modelInfo.IsCanceling = false;
}
break;
case ModelCleanUpMode.EndEdit:
try
{
EditableObjectHelper.EndEditObject(model);
}
catch (Exception ex)
{
Log.Warning(ex, "Failed to end the edit of object for model '{0}'", modelProperty);
}
break;
}
}
}
var modelAsINotifyPropertyChanged = model as INotifyPropertyChanged;
if (modelAsINotifyPropertyChanged != null)
{
modelAsINotifyPropertyChanged.PropertyChanged -= OnModelPropertyChangedInternal;
}
UninitializeModel(modelProperty, model, modelCleanUpMode);
}