I want to share this great post from Anoop that shows a easy way to add a notification system to dependency properties of a given element. It creates and attaches a new property to the existing property and let’s you specify the PropertyChangedCallback eventhandler.
There are different examples on the internet, but i like how Anoop created a generic method with access to the callback event handler.
Here is the main part of the code:
/// Listen for change of the dependency property public void RegisterForNotification(string propertyName, FrameworkElement element, PropertyChangedCallback callback) { //Bind to a depedency property Binding b = new Binding(propertyName) { Source = element }; var prop = System.Windows.DependencyProperty.RegisterAttached( "ListenAttached"+propertyName, typeof(object), typeof(UserControl), new System.Windows.PropertyMetadata(callback)); element.SetBinding(prop, b); }
And here is an example on how to use it:
//Shows a message box when the text of the Textbox changes. RegisterForNotification ("Text", this.txtMain,(d,e)=>MessageBox.Show("Text changed"));
Read Anoop’s complete article for more information!
update (07/28/2011):
here is small update of the code so it also works with other objects instead of just FrameworkElements
private void RegisterForNotification(string propertyName, object source, PropertyChangedCallback callback) { Binding b = new Binding(propertyName); b.Source = source; DependencyProperty prop = System.Windows.DependencyProperty.RegisterAttached( "ListenAttached" + propertyName, typeof(object), this.GetType(), new System.Windows.PropertyMetadata(callback)); BindingOperations.SetBinding(this, prop, b); }
引用
Tips & Tricks: Listening to Dependency Property change notifications of a given Element