public void SetBinding (DependencyProperty dp, Binding binding) {
			if (dp == null || binding == null)
				throw new ArgumentNullException ();

			if (!bindings.Contains (binding))
				bindings.Add (binding);

			binding.AddTargetProperty (this, dp);
			binding.SourceUpdated +=
                (s, e) => {
				var bind = (Binding)s;
				if (bind.Mode != BindingMode.OneWayToSource) {
					if ( bind.IsBound ( ) ) {
						var value = bind.GetSourceValue ();
						foreach (var prop in bind.GetTargetProperties(this)) {
							this.SetValue (prop, value);
						}
					}
				}
			};

			if (binding.Source == null)
				binding.DataContext = this.DataContext;

			binding.OnSourceUpdated ();
		}