У меня есть форма с несколькими элементами управления; некоторые текстовые поля, которые связаны данными со свойствами объекта частной формы (Financial) и DevExpress GridControl, который связан данными со свойством BindingList (of Fee) (Fees) в том же финансовом объекте. Одним из свойств в Financial является свойство только для чтения, которое рассчитывает некоторые данные на основе других свойств Financial и Fees (MonthlyCosts). И финансовые, и комиссионные реализуют INotifyPropertyChanged.
Проблема, с которой я сталкиваюсь, заключается в том, что текстовое поле, привязанное к этому свойству MonthlyCosts, не обновляется при внесении изменений в GridControl. Если я изменю стоимость комиссии в 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))
Кажется, что все привязки данных работают нормально, за исключением случая, когда изменение сборов не приводит к изменению текстового поля Итого. Если я помещаю кнопку, которая отображает свойство Total в MessageBox, он сообщает правильное значение Total, но текстовое поле не обновляется. Похоже, что NotifyPropertyChanged на объекте Fee не распространяется через BindingList в форму, чтобы сказать ему обновить текстовое поле Total.