您现在的位置: IT专家网 > WinSystem子站 > 技巧
让人迷恋 Avalon 数据绑定
作者: Chris Sells, 出处:微软, 责任编辑: 韩博颖,
2008-05-26 08:38
讨论 Avalon,并且将数据绑定引入其基于 Longhorn 的 Solitaire 应用程序。
然而,就 Person 类的当前实现而言,尽管我们的 Birthday 按钮实现更改了基础对象,但它将不会导致 UI 更新。换句话说,连续按 Birthday 和 Show 按钮将导致如图 3 所示的差异。

图 3. 显示未正确启用双向数据绑定的已更新 Person 对象
问题在于,尽管 Avalon 数据绑定引擎可以监控 UI 更改并更新基础对象数据,但该对象本身在其数据被直接更改时并不会引发任何事件。那么,我们该怎么办呢?要使 Avalon 跟踪 Person 类实例上发生的更改,它需要实现 IPropertyChange 接口:
| namespace System.ComponentModel { public interface IPropertyChange { public event PropertyChangedEventHandler PropertyChanged; } } Updating our Person to support IPropertyChange looks like this: class Person : IPropertyChange { public event PropertyChangedEventHandler PropertyChanged; void FirePropertyChanged(string propertyName) { if( this.PropertyChanged != null ) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } string name; public string Name { get { return this.name; } set { this.name = value; FirePropertyChanged("Name"); } } int age; public int Age { get { return this.age; } set { this.age = value; FirePropertyChanged("Age"); } } ... } |
如果您熟悉支持 Windows 窗体数据绑定的 Changed 事件,则可以使用 Avalon 的 IPropertyChange 接口来取代该约定。因为所有属性更改通知都通过单个事件引发,所以 Avalon 的机制可能更为有效。然而,在当前版本中,Avalon 不能识别 Windows 窗体 Changed 事件,因此,已经实现这些事件的对象必须添加对 Avalon 的新方法的支持,该新方法提供了属性更改通知。
- 本文关键词:

