protected virtual void SetValue(object value)
{
var shouldSetHandlers = false;
object oldValue = null;
UnconvertedValue = value;
var convertedValue = value;
if (_DataContextValue != value || _Value != value)
{
if (_DataContextValue != value)
{
if (DataContextMember != null)
{
var targetType = DataContextMember.GetMemberType();
convertedValue = ConvertbackValue(value, targetType);
oldValue = DataContextMember.GetValue(DataContextSource);
if (oldValue != value)
{
shouldSetHandlers = true;
if (DataContextMember.CanWrite())
{
DataContextMember.SetValue(DataContextSource, convertedValue);
}
}
_DataContextValue = convertedValue;
}
}
if (_Value != convertedValue)
{
var targetType = Member.GetMemberType();
convertedValue = ConvertValue(value, targetType);
oldValue = Member.GetValue(Source);
if (oldValue != value)
{
shouldSetHandlers = true;
if (Member.CanWrite())
{
Member.SetValue(Source, convertedValue);
}
}
_Value = convertedValue;
}
}
if (shouldSetHandlers)
{
AddNotifyCollectionChangedHandler(value, this);
AddNotifyPropertyChangedHandler(DataContextSource, this);
AddNotifyPropertyChangedHandler(Source, this);
}
Type = Member.GetMemberType();
Id = CreateId();
}