void targetObject_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            var ctx = ((FrameworkElement)sender).DataContext as FrameworkElement;

            var surface = ctx.TryFindParent <DesignSurface>();

            if (surface != null)
            {
                _binding        = new Binding(_propertyName);
                _binding.Source = ctx;
                _binding.UpdateSourceTrigger = UpdateSourceTrigger;
                _binding.Mode = BindingMode.TwoWay;

                var designItem = surface.DesignContext.Services.Component.GetDesignItem(ctx);

                _converter         = new DesignItemSetConverter(designItem, _propertyName, SingleItemProperty);
                _binding.Converter = _converter;

                _targetObject.SetBinding(_targetProperty, _binding);
            }
            else
            {
                _targetObject.ClearValue(_targetProperty);
            }
        }
		void targetObject_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
		{
			var ctx = ((FrameworkElement) sender).DataContext as FrameworkElement;

			var surface = ctx.TryFindParent<DesignSurface>();

			if (surface != null)
			{
				_binding = new Binding(_propertyName);
				_binding.Source = ctx;
				_binding.UpdateSourceTrigger = UpdateSourceTrigger;
				_binding.Mode = BindingMode.TwoWay;

				var designItem = surface.DesignContext.Services.Component.GetDesignItem(ctx);

				_converter = new DesignItemSetConverter(designItem, _propertyName, SingleItemProperty);
				_binding.Converter = _converter;

				_targetObject.SetBinding(_targetProperty, _binding);
			}
			else
			{
				_targetObject.ClearValue(_targetProperty);
			}
		}
        void targetObject_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            var dcontext = ((FrameworkElement)sender).DataContext;

            DesignContext    context    = null;
            FrameworkElement fe         = null;
            DesignItem       designItem = null;

            if (dcontext is DesignItem)
            {
                designItem = (DesignItem)dcontext;
                context    = designItem.Context;
                fe         = designItem.View as FrameworkElement;
            }
            else if (dcontext is FrameworkElement)
            {
                fe = ((FrameworkElement)dcontext);
                var srv = fe.TryFindParent <DesignSurface>();
                if (srv != null)
                {
                    context    = srv.DesignContext;
                    designItem = context.Services.Component.GetDesignItem(fe);
                }
            }

            if (context != null)
            {
                _binding        = new Binding(_propertyName);
                _binding.Source = fe;
                _binding.UpdateSourceTrigger = UpdateSourceTrigger;

                if (designItem.Services.Selection.SelectedItems.Count > 1 && UpdateSourceTriggerMultipleSelected != null)
                {
                    _binding.UpdateSourceTrigger = UpdateSourceTriggerMultipleSelected.Value;
                }

                _binding.Mode = BindingMode.TwoWay;
                _binding.ConverterParameter = ConverterParameter;

                _converter         = new DesignItemSetConverter(designItem, _propertyName, SingleItemProperty, AskWhenMultipleItemsSelected, Converter);
                _binding.Converter = _converter;

                _targetObject.SetBinding(_targetProperty, _binding);
            }
            else
            {
                _targetObject.ClearValue(_targetProperty);
            }
        }
		void targetObject_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
		{
			var dcontext = ((FrameworkElement) sender).DataContext;
			
			DesignContext context = null;
			FrameworkElement fe = null;
			DesignItem designItem = null;
			
			if (dcontext is DesignItem) {
				designItem = (DesignItem)dcontext;
				context = designItem.Context;
				fe = designItem.View as FrameworkElement;
			} else if (dcontext is FrameworkElement) {
				fe = ((FrameworkElement)dcontext);
				var srv = fe.TryFindParent<DesignSurface>();
				if (srv != null) {
					context = srv.DesignContext;
					designItem = context.Services.Component.GetDesignItem(fe);
				}
			}

			if (context != null)
			{
				_binding = new Binding(_propertyName);
				_binding.Source = fe;
				_binding.UpdateSourceTrigger = UpdateSourceTrigger;
				_binding.Mode = BindingMode.TwoWay;
				_binding.ConverterParameter = ConverterParameter;

				_converter = new DesignItemSetConverter(designItem, _propertyName, SingleItemProperty, AskWhenMultipleItemsSelected, Converter);
				_binding.Converter = _converter;

				_targetObject.SetBinding(_targetProperty, _binding);
			}
			else
			{
				_targetObject.ClearValue(_targetProperty);
			}
		}