MVVM项目DataGrid的ComboBox选中值未同步更新DataTable记录问题求助
问题根因
- 绑定路径错误:所有行的ComboBox选中项都绑定到了ViewModel全局的
SelectedObjectTypeTerm属性,没有绑定到DataGrid当前行对应DataRow的OType字段,选中值只会更新全局变量,不会同步到每行的DataTable记录。 - 绑定逻辑冲突:同时配置了
SelectedItem、SelectedValue、SelectedIndex三个控制选中状态的属性,三者逻辑互相干扰,无法正确同步值。 - 绑定字段类型不匹配:你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
相关产品推荐
相关产品推荐

