/// <summary> /// Uninitializes a model by unsubscribing from all events. /// </summary> /// <param name="modelProperty">The name of the model property.</param> /// <param name="model">The model.</param> /// <param name="modelCleanUpMode">The model clean up mode.</param> 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); }
/// <summary> /// Called when a model uninitialized. /// </summary> /// <param name="modelProperty">The name of the model property.</param> /// <param name="model">The model.</param> /// <param name="modelCleanUpMode">The model clean up mode.</param> protected virtual void UninitializeModel(string modelProperty, object model, ModelCleanUpMode modelCleanUpMode) { }
/// <summary> /// Resets the model by calling uninitializing and initializing the model again. This means that if the model /// supports /// <see cref="IEditableObject"/>, it will be reset. /// </summary> /// <param name="modelProperty">The model property.</param> /// <param name="modelCleanUpMode">The model clean up mode.</param> /// <exception cref="ArgumentNullException">The <paramref name="modelProperty"/> is <c>null</c>.</exception> protected void ResetModel(string modelProperty, ModelCleanUpMode modelCleanUpMode) { Argument.IsNotNull("modelProperty", modelProperty); var model = GetValue(modelProperty); UninitializeModelInternal(modelProperty, model, modelCleanUpMode); InitializeModelInternal(modelProperty, model); }