Exemplo n.º 1
0
        protected virtual object GetValue()
        {
            Type targetType = null;

            if (Member != null && Source != null)
            {
                var view = Source as IDataContext <object>;
                if (view != null && view.DataContext != null)
                {
                    DataContextSource = view.DataContext;
                    DataContextMember = DataContextSource.GetType().GetMember(Member.Name).FirstOrDefault();

                    if (DataContextMember != null)
                    {
                        targetType = Member.GetMemberType();
                        var dataContextValue = DataContextMember.GetValue(DataContextSource);

                        return(Convert(dataContextValue, Type, ValueConverter));
                    }
                }

                var value = Member.GetValue(Source);
                return(value);
            }

            return(ConvertValue(_Value, targetType));
        }
Exemplo n.º 2
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();
        }