为什么即使我的表格中没有任何部分要求该属性,对象上的属性上的getter也会触发?

时间:2009-10-15 09:44:12

标签: .net vb.net winforms data-binding datagridview

通常,数据绑定winform只会触发与文本框,网格等匹配的属性的getter

但是当我浏览一个集合(通过BindingNavigator NextItem / PreviousItem)时,我发现如果我将一个数据网格的DataSource设置为一个属性,然后将其删除,那么此属性getter会继续触发,即使网格上有表格是空白的,不会要求提供数据。

这困扰我们的唯一原因是,如果在任何给定记录上第一次触发,则getter必须返回到数据层(这是一个小的性能命中)。我们的表单在不同的标签下有几个网格。因此,如果当前未选中的选项卡上的网格将其数据源设置为空,那么我们认为这将是一项改进。然而,吸气剂仍在射击(一旦选项卡及其网格至少被选中一次)......这与我们假设的性能提升有关。

简化示例:

说我有通过“国家/地区”记录卡的页面。在表格上我有两个网格:

第一个网格是针对该国的“城市” 第二个网格是国家的“河流”

默认情况下,城市网格绑定到Country.Cities 默认情况下,河流网格不是数据绑定并保持空白。

如果我浏览了我的五个测试国家(美国,英国,法国,德国,意大利),我的Country.Cities集合将被访问。 未访问Country.Rivers。正如你所料。每次Country.Cities或Country.Rivers我都会写入控制台 被访问,所以输出读取:

  

Country.Cities访问
  访问的Country.Cities
  访问的Country.Cities
  访问的Country.Cities
  访问过Country.Cities

忍受我。

如果在观看英国时我将Rivers网格手动绑定(例如通过虚拟按钮)到Country.Rivers集合, 然后将页面转到法国并手动取消绑定(例如,再次显式地通过按钮),然后继续寻呼到 意大利我看到的是:

  

Country.Cities访问
  访问的Country.Cities
  国家。河流访问
  访问的Country.Cities
  国家。河流访问
  访问的Country.Cities
  国家。河流访问< - ???
  访问的Country.Cities
  国家。河流访问< - ???

为什么德国&意大利仍然要求河流?

这是两个按钮下的代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    RiversGrid.DataSource = Me.CountryBindingSource
    RiversGrid.DataMember = "Rivers"

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    RiversGrid.DataSource = Nothing
    RiversGrid.DataMember = ""
    RiversGrid.Dispose()
End Sub

1 个答案:

答案 0 :(得分:0)

不知道为什么吸气剂会发射,但如果吸气剂只是返回属性值,为什么还要打扰你呢。