为什么更改一个绑定属性似乎会影响另一个?

时间:2013-11-22 22:22:36

标签: vb.net visual-studio-2010

我已经设置了一个名为Model的自定义对象,它有两个可绑定的属性。其中一个看起来像这样:

Private _activeCompanies As List(Of company)
Public Event activeCompaniesChanged As EventHandler
Public Property activeCompanies() As List(Of company)
    Get
        Return Me._activeCompanies
    End Get
    Set(ByVal value As List(Of company))
        Me._activeCompanies = value
        'raise the event so databinding is notified
        RaiseEvent activeCompaniesChanged(Me, New EventArgs)
    End Set
End Property

另一个是完全相同的,除了activeContracts

然后我将Model作为数据源添加到我的项目中。然后我将activeCompanies拖到一个DataGridView,将activeContracts拖到另一个。

我有一个更改model.activeContracts的按钮。当属性更改时,第二个DataGridView会自行更新;但第一个仅与model.activeCompanies相关的DGV也被“选中”。它目前的细胞变化。它不会更改行,但它实际上会触发ActiveContractsBindingSource上的更改事件(当我将属性拖到DGV上时会自动创建)。

这给我带来了问题,因为我正在尝试使用事件来触发应用程序中其他位置的数据更新。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

使用可变对象(如List<T>)来封装状态的类型通常应该避免将对这些对象的引用暴露给任何可能使它们变异的对象。目前还不清楚您是打算_activeCompanies封装外部代码所拥有的List<T>的身份,还是封装列表的内容,但在这两种情况下都不会通知您的代码列表的内容更改。