CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: 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");
  }
  }
  ...
  }
  当 Avalon 绑定到 Person 对象时,它将预订 PropertyChanged 事件,以便它能够在属性更改时更新绑定到这些属性的任何控件。在我们的 Person 类中,我们在任何属性更改时引发了该事件,以确保指定发生更改的属性的名称。通过这种方式,无论 UI 更改还是对象更改,这两者都能保持同步,而我们无须在两者之间编写代码以使事情恢复正常。

  如果您熟悉支持 Windows 窗体数据绑定的 Changed 事件,则可以使用 Avalon 的 IPropertyChange 接口来取代该约定。因为所有属性更改通知都通过单个事件引发,所以 Avalon 的机制可能更为有效。然而,在当前版本中,Avalon 不能识别 Windows 窗体 Changed 事件,因此,已经实现这些事件的对象必须添加对 Avalon 的新方法的支持,该新方法提供了属性更改通知。

?9?? 9 1 2 3 4 5 6 7 8 9 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

该文章的读者还阅读了

天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i