Catel.MVVM.ViewModelBase.OnModelPropertyChangedInternal C# (CSharp) Method

OnModelPropertyChangedInternal() private method

Handles the PropertyChanged event of a Model.
private OnModelPropertyChangedInternal ( object sender, PropertyChangedEventArgs e ) : void
sender object The source of the event.
e System.ComponentModel.PropertyChangedEventArgs The instance containing the event data.
return void
        private void OnModelPropertyChangedInternal(object sender, PropertyChangedEventArgs e)
        {
            foreach (var map in _viewModelToModelMap)
            {
                var mapping = map.Value;
                IViewModelToModelConverter converter = mapping.Converter;
                if (converter.ShouldConvert(e.PropertyName))
                {
                    // Check if this is the right model (duplicate mappings might exist)
                    if (_modelObjects[mapping.ModelProperty] == sender)
                    {
                        // Only OneWay, TwoWay or Explicit (yes, only VM => M is explicit) should be mapped
                        if ((mapping.Mode == ViewModelToModelMode.TwoWay) || (mapping.Mode == ViewModelToModelMode.OneWay) ||
                            (mapping.Mode == ViewModelToModelMode.Explicit))
                        {
                            var values = new object[mapping.ValueProperties.Length];
                            for (var index = 0; index < mapping.ValueProperties.Length; index++)
                            {
                                var property = mapping.ValueProperties[index];
                                values[index] = PropertyHelper.GetPropertyValue(sender, property, false);
                            }

                            var convertedValue = mapping.Converter.Convert(values, this);
                            SetValue(mapping.ViewModelProperty, convertedValue);
                        }
                    }
                }
            }

            var modelNameOnViewModel = (from modelObject in _modelObjects
                                        where ObjectHelper.AreEqualReferences(modelObject.Value, sender)
                                        select modelObject.Key).FirstOrDefault();
            if (!string.IsNullOrEmpty(modelNameOnViewModel))
            {
                _modelsDirtyFlags[modelNameOnViewModel] = true;
            }

            OnModelPropertyChanged(sender, e);

            Validate();
        }