【发布时间】:2019-04-04 01:27:22
【问题描述】:
我有一个带有几个控件的表单;一些文本框数据绑定到私有表单对象的属性(财务)和 DevExpress GridControl,数据绑定到同一财务对象上的 BindingList(of Fee) (Fees) 属性。 Financial 的属性之一是只读属性,它根据 Financial and Fees (MonthlyCosts) 的其他属性计算一些数据。 Financial 和 Fee 都实现了 INotifyPropertyChanged。
我遇到的问题是,当对 GridControl 进行更改时,绑定到该 MonthlyCosts 属性的文本框不会更新。如果我更改 GridControl 中的费用成本,然后更改也用于该计算的文本框值(Margin),则具有计算值的文本框只会在我更改 Margin 后更新。
部分相关代码如下所示:
Public Class Financial
Inherits BindableBase ' helper for INotifyPropertyChanged
Public Property Margin As Decimal
Get
return _margin
End Get
Set
SetProperty() ' INotifyPropertyChanged stuff
End Set
End Property
Public ReadOnly Property Fees As BindingList(Of Fee)
Public ReadOnly Property Total as Decimal
Get
return Fees.Sum(Function(fee) fee.Amount) / (1 - Margin)
End Get
End Property
End Class
Public Class Fee
Inherits BindableBase ' helper for INotifyPropertyChanged
Public Property Amount as Decimal
End Class
形式:
' Setup the databindings
Margin.DataBindings.Add("EditValue", Financial, NameOf(Financial.Margin))
FeeGrid.DataBindings.Add("DataSource", Financial, NameOf(Financial.Fees))
Total.DataBindings.Add("EditValue", Financial, NameOf(Financial.Total))
数据绑定似乎都可以正常工作,除非更改费用不会更改总计文本框。如果我在 MessageBox 中放置一个弹出 Total 属性的按钮,它会报告正确的 Total,但文本框没有更新。似乎费用对象上的 NotifyPropertyChanged 没有通过 BindingList 向上传播到 Form 以告诉它刷新 Total 文本框。
【问题讨论】:
-
您显示了
Public Class Fee的声明并且还有Public ReadOnly Property Fees As BindingList(Of Fees)- 这是帖子中的拼写错误吗? -
是的,这只是一个错字。谢谢!
标签: .net vb.net winforms data-binding devexpress-windows-ui