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

MVVM项目DataGrid的ComboBox选中值未同步更新DataTable记录问题求助

问题根因

  1. 绑定路径错误:所有行的ComboBox选中项都绑定到了ViewModel全局的SelectedObjectTypeTerm属性,没有绑定到DataGrid当前行对应DataRow的OType字段,选中值只会更新全局变量,不会同步到每行的DataTable记录。
  2. 绑定逻辑冲突:同时配置了SelectedItem、SelectedValue、SelectedIndex三个控制选中状态的属性,三者逻辑互相干扰,无法正确同步值。
  3. 绑定字段类型不匹配:你DataTable中OType列是String类型,但绑定的SelectedValue对应到的是AddGroupObjectTypeModel的ID(int类型),类型不匹配也会导致赋值失败。

修复方案

根据你要存到DataTable的是类型字符串还是ID,选对应方案即可:

方案1:存类型字符串到OType列(符合你当前DataTable配置)

直接修改ComboBox的绑定逻辑:

<ComboBox ItemsSource="{Binding Path=DataContext.ObjectTypeTerms, RelativeSource={RelativeSource AncestorType=DataGrid}}"
          DisplayMemberPath="ObjType"
          SelectedValuePath="ObjType"
          SelectedValue="{Binding OType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
          Style="{StaticResource ComboBoxTheme}" />

方案2:存类型ID到OType列

先修改DataTable的OType列类型:

// 把原来的string类型改成int
ObjectsDisplayTable.Columns.Add("OType", typeof(int));

再修改ComboBox绑定:

<ComboBox ItemsSource="{Binding Path=DataContext.ObjectTypeTerms, RelativeSource={RelativeSource AncestorType=DataGrid}}"
          DisplayMemberPath="ObjType"
          SelectedValuePath="ID"
          SelectedValue="{Binding OType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
          Style="{StaticResource ComboBoxTheme}" />

补充说明

如果确实需要在ViewModel中保留全局的SelectedObjectTypeTerm变量记录当前选中的类型实例,可以在对应行的选中事件或者DataTable的行变更事件中同步赋值,不要将全局变量作为所有行ComboBox的选中绑定源。

内容的提问来源于stack exchange,提问作者Wolfenstyne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:03