数据绑定(二)(翻译)

翻译 2004年03月10日 18:28:00

改变属性的注意事项:

现在我们知道了数据绑定,下面我们看看对象如何支持自动属性改变. 当我们在程序中改变对象的数据,很难让我们知道控件的改变.UI和对象可以得到我们看不到的正确数据.

我们需要的是对象在任何时间提醒UI,属性值的改变.而这些我们可以通过事件的声明来

体现,当数据绑定时,数据绑定是根据事件的的属性改变,这些属性是对象的属性名称.

举例:我们刚才的ORDER类定义了一个ID属性,当数据绑定到控件时,绑定就开始倾听

ID属性改变这个事件.ID改变事件发生,则相应的对象也改变.

我们可以通过声明这些事件来说明我们的ORDER:

Public Class Order
  Public Event IDChanged As EventHandler
  Public Event CustomerChanged As EventHandler

这些事件通过EventHandler来声明.这就需要数据绑定知道这些事件,如果我们不声明

这些事件的话,当数据绑定时候就会产生例外.WINDOWS窗口中EVENTHANDLE

是一个标准的事件模型.这些事件是通过senderEVENT来定义的.利用事件声明,我们确保

属性变化时,事件也要产生.SET中是最佳时期,我们利用ID属性来实现一下:

  Public Property ID() As String
    Get
      Return mID
    End Get
    Set(ByVal Value As String)
      mID = Value
      RaiseEvent IDChanged(Me, New EventArgs())
    End Set
  End Property

我们建立一个触发器来捕捉ID属性的任何时候任何地方的变化,很多的类是通过SET方法来给变量付值的.这就需要我们及时的事件来出发这些值的改变.举个比较好的例子,ORDER类有很多的LINEITEM连接对象,先让我们看看LINEITEM类的变量声明:

Public Class LineItem
  Public Event ProductChanged As EventHandler
  Public Event QuantityChanged As EventHandler
  Public Event PriceChanged As EventHandler
  Public Event AmountChanged As EventHandler
 
  Private mProduct As String
  Private mQuantity As Integer
  Private mPrice As Double

 有四个事件,但只有三个有变量, Amount 属性通过数量和价格来计算.

  Public ReadOnly Property Amount() As Double
    Get
      Return mQuantity * mPrice
    End Get
  End Property

 这是一个只读属性,但我们可改动.事实上其他价格数量的改变它也随之改变,因此我们需要事件来捕捉它,例如价格改变:

  Public Property Price() As Double
    Get
      Return mPrice
    End Get
    Set(ByVal Value As Double)
      mPrice = Value
      RaiseEvent PriceChanged(Me, New EventArgs())
      RaiseEvent AmountChanged(Me, New EventArgs())
    End Set
  End Property

由于价格的改变,我们不光做PRICECHANGED事件,还要触发事件,这样才能使AMOUNT属性改变的正确.这些代码是我们能够及时发现数据变动的事件.

那就是说我们的AMOUNTCHANGED事件不要严格,当数据绑定到对象属性上时,数据绑定是倾听PROPERTYCHANGED事件.一旦这些时间触发,对象的控件就会更新.

换句话说,如果窗体控件绑定到PRICEAMOUNT属性上,窗体触发的PRICECHANGED

事件,不光是使PRICE属性更新,同样AMOUNT属性也得到了更新.

 如果我们仅仅绑定AMOUNT,UI由于没出发AMOUNTCHANGED事件使得我们的UI不能正常工作,正是这个原因,我们需要为每个属性声明PROPERTYCHANGED事件.

 

实现windows程序的数据绑定第五章

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...
  • qq_36074064
  • qq_36074064
  • 2016年12月11日 14:38
  • 217

数据绑定(翻译)

中文信息:           数据绑定和控件的介绍当微软公司开发出窗体控件和网页控件时,它就拼命的实现数据绑定.当时还是使用的是vb,他们就进行了大篇幅的功能程序编辑.最有效的数据绑定不是我们说的d...
  • rickjelly2004
  • rickjelly2004
  • 2004年03月11日 10:09
  • 1306

我在南邮的三年—研二生活

中国学生都有一个通病,那就是做任何事情都要别人吩咐。本科生就期待考试结束便万事大吉了,没想到很多研究生也是这样。        由于南邮的大部分学生在研一的时候就把所有的学分拿到了,...
  • liujinwen1992
  • liujinwen1992
  • 2014年09月19日 20:42
  • 685

English learning method ---学英语重中之重打通“任督二脉”

漫漫十年艰辛路,英语学习之旅         曾经秉承“路漫漫其修远兮,吾将上下而求索”的信念,开始将a b c d e f g (啊,波,词,的,额,佛,哥)  abcdefg()转变,一学就是十多...
  • mazhaojuan
  • mazhaojuan
  • 2013年09月14日 17:33
  • 3064

动态二进制代码翻译[2][VM Versatile platforms for systems and process]

递增式二进制翻译高级控制由模拟管理器运行时提供其它主要元素:解释器,二进制翻译器关键点——>解释器首先处理原始的源二进制码。 每块源二进制码翻译后保存在块。。。正中。翻译越多,消耗越多内存。有潜在浪费...
  • superwiles
  • superwiles
  • 2008年11月25日 06:21
  • 1031

vb.net合伙数据库access(二)——数据绑定控件成功

当我们已经建立了vb.net和数据库access的链接之后随后显示数据就会非常的简单了,其实就是以前我们学习过的对于一个控件进行了数据的绑定,根本不需要任何的代码,而这节不仅单单是教大家如何显示数据,...
  • changyinling520
  • changyinling520
  • 2016年01月07日 15:37
  • 1913

临界区例子及相关函数翻译

例子:记录线程调用顺序 #include #include #include using namespace std; #define THREADCOUNT 9 CRITICAL_SEC...
  • dreamcs
  • dreamcs
  • 2012年09月06日 16:19
  • 1957

MvvmLight(二)数据绑定DataBinding

数据绑定DataBinding使用目的目的一: ————View的值在后台ViewModel(或者是Logic、Model)层自动获取到 目的二: ————ViewModel(或者是Logic、...
  • PanPen120
  • PanPen120
  • 2015年09月04日 10:11
  • 516

二 d3.数据绑定

1. D3可以处理哪些类型的数据? JS的数据类型。 如数字,时间,字符串,布尔值,数组,对象等都可以。 D3自定义的数据类型。 如集合(Set),映射(Map),嵌套(Nest),及各...
  • aijava_1990
  • aijava_1990
  • 2016年12月08日 09:40
  • 84

Android开发-数据绑定-DataBinding-AndroidStudio(二)单组数据绑定

本篇博客主要介绍DataBinding使用过程中的代码范例: 比如小于号转义字符,括号的转义字符,或运算。主要看一下layout就可以。 转载请注明出处:http://blog.csdn.net/iw...
  • iwanghang
  • iwanghang
  • 2016年11月17日 11:50
  • 1074
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据绑定(二)(翻译)
举报原因:
原因补充:

(最多只允许输入30个字)