Exemplo n.º 1
0
        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();
        }