WPF Combobox绑定不更新:选中值变更未触发属性Setter
问题根源
你当前的绑定路径是CurrentEngChangeNotice.ProductEng.UserID,这意味着你在修改Engineer对象的UserID属性,而非给ProductEng属性赋值全新的Engineer实例。只有当你替换整个ProductEng对象时,才会触发它的Setter方法,所以现在的绑定逻辑根本不会调用你写的Setter。
解决方案
最直接的修复方式是修改ComboBox的绑定,直接绑定SelectedItem到ProductEng/MfgEng属性,而非绑定SelectedValue到UserID:
修改后的生产工程师ComboBox:
<ComboBox Grid.Column="1" ItemsSource="{Binding ProductionEngineers}" DisplayMemberPath="FullName" SelectedItem="{Binding CurrentEngChangeNotice.ProductEng, Mode=TwoWay}"/>
修改后的制造工程师ComboBox:
<ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding ManufacturingEngineers}" DisplayMemberPath="FullName" SelectedItem="{Binding CurrentEngChangeNotice.MfgEng, Mode=TwoWay}"/>
调整后,当你在ComboBox中选择新工程师时,WPF会直接将选中的Engineer对象赋值给ProductEng/MfgEng属性,触发你写好的Setter方法,进而执行数据库更新逻辑。
补充说明
如果因特殊需求必须绑定SelectedValue到UserID,需要做以下调整:
- 确保
Engineer类的UserID属性实现INotifyPropertyChanged接口 - 在
CurrentEngChangeNotice类中监听ProductEng.UserID的变化,或者在Engineer的UserIDSetter中处理数据库更新
但这种方式复杂度更高,远不如直接绑定SelectedItem简洁高效。
内容的提问来源于stack exchange,提问作者Michael Rourk
相关产品推荐
相关产品推荐

