WPF中ComboBox绑定DataGrid列无法自动更新问题咨询
WPF ComboBox绑定DataGrid选中项无法自动更新的解决方法
你的ComboBox无法自动更新,问题出在两个关键错误上:
错误点分析
- 绑定路径错误:你使用了
SelectedValue.BedArea,但DataGrid的SelectedValue默认指向选中项本身(未设置SelectedValuePath时),正确的路径应该是SelectedItem.BedArea,和你其他TextBox的绑定逻辑保持一致。 - 绑定模式错误:
Mode=OneTime仅在控件初始化时执行一次绑定,后续DataGrid选中项变化不会触发ComboBox更新,需要改为OneWay(或省略,因为OneWay是默认模式)。
修正后的XAML代码
将ComboBox的绑定代码修改为:
<ComboBox Grid.Row="6" Grid.Column="1" x:Name="cmbBedArea" HorizontalAlignment="Left" VerticalAlignment="Center" SelectedValue="{Binding ElementName=gridUsers, Path=SelectedItem.BedArea}" Width="200"/>
补充说明
如果你的ComboBox绑定了独立的可选BedArea列表(即设置了ItemsSource),还需要确保SelectedValuePath属性与BedArea字段名一致,这样SelectedValue才能正确匹配选中项的值。例如:
<ComboBox ItemsSource="{Binding BedAreaList}" SelectedValuePath="BedArea" SelectedValue="{Binding ElementName=gridUsers, Path=SelectedItem.BedArea}" .../>
原错误代码对比
你原来的ComboBox绑定代码:
<ComboBox Grid.Row="6" Grid.Column="1" x:Name="cmbBedArea" HorizontalAlignment="Left" VerticalAlignment="Center" SelectedValue="{Binding ElementName=gridUsers, Path=SelectedValue.BedArea, Mode=OneTime}" Width="200"/>
你之前用后台代码实现更新的逻辑:
private void gridUsers_SelectionChanged(object sender, SelectionChangedEventArgs e) { var drv = ((DataRowView)((DataGrid)sender).SelectedItem).Row; if (drv != null) { cmbBedArea.SelectedValue = drv["BedArea"]; } }
修改XAML绑定后,就可以移除这段后台代码,完全通过数据绑定实现自动更新。
内容的提问来源于stack exchange,提问作者user2708720
相关产品推荐
相关产品推荐

