Exemple #1
0
        /// <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);
        }
Exemple #2
0
 /// <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)
 {
 }
Exemple #3
0
        /// <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);
        }