You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中ComboBox绑定DataGrid列无法自动更新问题咨询

WPF ComboBox绑定DataGrid选中项无法自动更新的解决方法

你的ComboBox无法自动更新,问题出在两个关键错误上:

错误点分析

  1. 绑定路径错误:你使用了SelectedValue.BedArea,但DataGrid的SelectedValue默认指向选中项本身(未设置SelectedValuePath时),正确的路径应该是SelectedItem.BedArea,和你其他TextBox的绑定逻辑保持一致。
  2. 绑定模式错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:42:56