using System; using System.Windows; using System.Windows.Data; namespace Juick.Classes { public class DependencyPropertyListener { static int index; readonly DependencyProperty property; FrameworkElement target; public event EventHandler Changed; public DependencyPropertyListener() { property = DependencyProperty.RegisterAttached( "DependencyPropertyListener" + DependencyPropertyListener.index++, typeof(object), typeof(DependencyPropertyListener), new PropertyMetadata(null, new PropertyChangedCallback(HandleValueChanged))); } public void Attach(FrameworkElement element, Binding binding) { if (element == null) { throw new ArgumentNullException("element"); } if (target != null) { throw new InvalidOperationException("Cannot attach an already attached listener"); } target = element; target.SetBinding(property, binding); } public void Detach() { target.ClearValue(property); target = null; } void HandleValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { if (Changed != null) { Changed.Invoke(this, new BindingChangedEventArgs(e)); } } } }