Wpf 更新属性';基于另一个属性&x27;s输入

Wpf 更新属性';基于另一个属性&x27;s输入,wpf,vb.net,wpfdatagrid,Wpf,Vb.net,Wpfdatagrid,我有一个绑定到数据网格的可观察集合。在datagrid行上,编辑属性值时,需要该行上的另一个属性根据计算更新其值。做这件事最好的方法是什么。我尝试创建一个collectionchanged方法,如下所示: Public WithEvents Tickets As ObservableCollection(Of Ticket) Public Sub Tickets_CollectionChanged(ByVal sender As Object, ByVal e As NotifyColl

我有一个绑定到数据网格的可观察集合。在datagrid行上,编辑属性值时,需要该行上的另一个属性根据计算更新其值。做这件事最好的方法是什么。我尝试创建一个collectionchanged方法,如下所示:

   Public WithEvents Tickets As ObservableCollection(Of Ticket)

Public Sub Tickets_CollectionChanged(ByVal sender As Object, ByVal e As NotifyCollectionChangedEventArgs) Handles TicketCollection.CollectionChanged
    CalculatedVariable = determineCalculation()
End Sub
但是,它仅在添加或删除新项时调用,而不是在编辑行中的属性时调用。我研究的另一种方法是在每个属性的setter中调用calculation方法,但如果知道我需要调用该方法并在需要它的几个不同属性上更新该属性,那么这似乎很麻烦。有没有一种简单有效的方法可以让我完成我想做的事情?Thanks(如有任何反馈:)


ObservableCollection列出的元素类必须实现INotifyPropertyChanged。您必须在setters中引发PropertyChanged事件。然后您可以在类中订阅此事件,并在回调中进行计算。我发现它比在每个setter中进行计算要干净一点,而且无论如何,如果您希望在更改对象的任何属性时更新UI,则需要实现INotifyPropertyChanged。

我确实在实现INotifyPropertyChanged的setter中调用RaisePropertyChanged。这很奇怪,因为它还没有被调用。我更新了一个WSER来显示getter setter示例实际上我上面有getter和setter,但是没有计算变量。该属性位于继承已更改my RaiseProperty的类的模型类内。我是否缺少setter中的某些内容,或者我是否必须调用其他内容?另一种解决方案可能是对转换器使用多重绑定,您可以在其中进行计算……是的,我不喜欢转换器:(我还认为调用determineCalculation()有点混乱)直接在每个setter中,我建议您在PropertyChanged事件的回调中进行调用。您只是想找到更好的解决方案,还是混乱的解决方案不起作用?
 public property MyVariable
 Get 
     return _MyVariable
 Set(value)
     _MyVariable = value
     CalculatedVariable = determineCalculation()
     RaisePropertyChange("MyVariable") , ect..
 EndProperty