WPF C#如何为存在大量行值变动的DataGrid内ComboBox设置默认值
问题核心原因
你当前的代码同时绑定了SelectedValue和SelectedIndex两个属性,这两个属性均用于控制ComboBox的选中状态,同时绑定会产生冲突,导致选中值无法正确显示。
解决方案
按你的业务场景二选一保留绑定即可,无需同时配置两个选中属性:
场景1:行数据用cTipoTransaccion存选中的文本值
删除SelectedIndex的绑定代码即可,修正后的XAML如下:
<DataGrid.Columns> <DataGridTemplateColumn Header="Cheque/Transf." Width="105" CellStyle="{StaticResource cellStyle}" > <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Grid> <ComboBox FontSize="10" ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}},Path=DataContext.ChequeTransf}" DisplayMemberPath="Descripcion" SelectedValuePath="Descripcion" SelectedValue="{Binding Path=cTipoTransaccion,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> </ComboBox> </Grid> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns>
额外注意事项:
- 行数据模型的
cTipoTransaccion属性必须和Descripcion的类型完全一致,若为字符串需保证没有大小写、前后空格的差异 - 行数据模型必须实现
INotifyPropertyChanged接口,cTipoTransaccion的set方法中触发属性变更通知,保证行数据变动时前端同步更新 - 要设置默认值只需在每行数据初始化时,给
cTipoTransaccion赋值为ChequeTransf集合中对应项的Descripcion值即可
场景2:行数据用cbxIdTransaccion存选中的索引值
删除SelectedValue、SelectedValuePath的绑定,仅保留SelectedIndex绑定即可,默认值直接给cbxIdTransaccion赋值为0即可选中第一项。
内容的提问来源于stack exchange,提问作者Juan Mendoza Perez
相关产品推荐
相关产品推荐

