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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:30:00