我已经设置了一个名为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上时会自动创建)。
这给我带来了问题,因为我正在尝试使用事件来触发应用程序中其他位置的数据更新。知道为什么会这样吗?
答案 0 :(得分:0)
使用可变对象(如List<T>
)来封装状态的类型通常应该避免将对这些对象的引用暴露给任何可能使它们变异的对象。目前还不清楚您是打算_activeCompanies
封装外部代码所拥有的List<T>
的身份,还是封装列表的内容,但在这两种情况下都不会通知您的代码列表的内容更改。