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();
}