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