[WPF系列]基础 Listening to Dependency Property change notifications of a given Element
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
作者:旭东
出处:http://www.cnblogs.com/HQFZ
关于作者:专注于微软平台项目架构、管理和企业解决方案。现主要从事WinForm、ASP.NET、WPF、WCF、等方面的项目开发、架构、管理。如有问题或建议,请不吝指教!
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题,可以联系我,非常感谢。
如果您该文觉得不错或者对你有帮助,请点下推荐,让更多的朋友看到,谢谢!