public void SetBinding(DependencyObject target, DependencyProperty targetProperty, string[] identities) { if (identities != null) { Binding binding = BindingOperations.GetBinding(target, targetProperty); if (binding != null) { MultiDataPointBindingObject source = binding.Source as MultiDataPointBindingObject; if (source != null) { source.Dispose(); } } if (identities.Length == 1) { this.SetBinding(target, targetProperty, identities[0]); } else if (target is ISetValue) { BindingOperations.ClearBinding(target, targetProperty); MultiDataPointBindingObject obj3 = new MultiDataPointBindingObject(target as ISetValue); foreach (string str in identities) { DataPointBindingObject bindingObject = this.GetBindingObject(str); if (bindingObject == null) { bindingObject = new DataPointBindingObject(str); this.AddBindingObjcet(str, bindingObject); } obj3.AddBindingObject(bindingObject); } Binding binding2 = new Binding("Value") { Mode = BindingMode.OneWay, Source = obj3 }; BindingOperations.SetBinding(target, targetProperty, binding2); } } }
internal void ClearBinding() { Dictionary <string, string> dictionary = new Dictionary <string, string>(); foreach (BindingTag tag in this.bindingInfo) { if (!dictionary.ContainsKey(tag.ElementName)) { FrameworkElement element = this.ui.FindName(tag.ElementName) as FrameworkElement; if (element != null) { if (element is ISetValue) { string name = "ValueProperty"; FieldInfo field = element.GetType().GetField(name, BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static); if ((field != null) && (field.FieldType == typeof(DependencyProperty))) { DependencyProperty dp = field.GetValue(element) as DependencyProperty; Binding binding = BindingOperations.GetBinding(element, dp); if (binding != null) { MultiDataPointBindingObject source = binding.Source as MultiDataPointBindingObject; if (source != null) { source.Dispose(); } } } } BindingOperations.ClearAllBindings(element); if (element is IDisposable) { ((IDisposable)element).Dispose(); } dictionary.Add(tag.ElementName, tag.ElementName); } } } }