数据绑定(二)(翻译)

改变属性的注意事项:

现在我们知道了数据绑定,下面我们看看对象如何支持自动属性改变. 当我们在程序中改变对象的数据,很难让我们知道控件的改变.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事件.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值