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 (); }