Exemplo n.º 1
0
        protected virtual void ClearTargetBinding()
        {
            lock (_targetLocker)
            {
                if (_targetBinding != null)
                {
                    if (_targetBindingOnValueChanged != null)
                    {
                        _targetBinding.ValueChanged -= _targetBindingOnValueChanged;
                        _targetBindingOnValueChanged = null;
                    }

                    _targetBinding.Dispose();
                    _targetBinding = null;
                }
            }
        }
Exemplo n.º 2
0
        private void CreateTargetBinding(object target)
        {
            _targetBinding = TargetBindingFactory.CreateBinding(target, _bindingDescription.TargetName);

            if (_targetBinding == null)
            {
                Log.Warning("Failed to create target binding for {0}", _bindingDescription.ToString());
                _targetBinding = new NullTargetBinding();
            }

            if (NeedToObserveTargetChanges)
            {
                _targetBinding.SubscribeToEvents();
                _targetBindingOnValueChanged = (sender, args) => UpdateSourceFromTarget(args.Value);
                _targetBinding.ValueChanged += _targetBindingOnValueChanged;
            }

            _defaultTargetValue = _targetBinding.TargetType.CreateDefault();
        }
Exemplo n.º 3
0
        protected virtual bool TryCreateReflectionBasedBinding(object target, string targetName,
                                                               out ITargetBinding binding)
        {
            if (string.IsNullOrEmpty(targetName))
            {
                Log.Error("Empty binding target passed to MvxTargetBindingFactoryRegistry");
                binding = null;
                return(false);
            }

            if (target == null)
            {
                // null passed in so return false - fixes #584
                binding = null;
                return(false);
            }

            var targetPropertyInfo = target.GetType().GetProperty(targetName);

            if (targetPropertyInfo != null &&
                targetPropertyInfo.CanWrite)
            {
                binding = new WithEventPropertyInfoTargetBinding(target, targetPropertyInfo);
                return(true);
            }

            var targetEventInfo = target.GetType().GetEvent(targetName);

            if (targetEventInfo != null)
            {
                // we only handle EventHandler's here
                // other event types will need to be handled by custom bindings
                if (targetEventInfo.EventHandlerType == typeof(EventHandler))
                {
                    binding = new EventHandlerEventInfoTargetBinding(target, targetEventInfo);
                    return(true);
                }
            }

            binding = null;
            return(false);
        }
Exemplo n.º 4
0
        protected virtual bool TryCreateSpecificFactoryBinding(object target, string targetName,
                                                               out ITargetBinding binding)
        {
            if (target == null)
            {
                // null passed in so return false - fixes #584
                binding = null;
                return(false);
            }

            var factory = FindSpecificFactory(target.GetType(), targetName);

            if (factory != null)
            {
                binding = factory.CreateBinding(target, targetName);
                return(true);
            }

            binding = null;
            return(false);
        }