向着光- 2021-07-30 13:38 采纳率: 60%
浏览 233
已结题

WPF datagrid中下拉框ItemsSource刷新后,已经选择的文本丢失

img

img

img

如图,第一行选择了配方之后,第二行再选择配方的时候需要更新下拉框,下拉框更新后却把第一行已经选择的数据给清除了。后台是将下拉框的ObservableCollection集合clear之后重新赋值刷新下拉框。如何解决?

                    <DataGridTemplateColumn Header="钻井液配方" HeaderStyle="{StaticResource columnHeaderCenter}" Width="200">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox  IsEditable="True" 
                                           Text="{Binding Composition,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                           ItemsSource="{Binding DataContext.Composition_list,Mode=Default, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}" >
                                    <i:Interaction.Triggers>
                                        <i:EventTrigger EventName="DropDownOpened">
                                            <command:EventToCommand CommandParameter="{Binding Id}"  Command="{Binding DataContext.DropDownCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}"/>
                                        </i:EventTrigger>
                                        <i:EventTrigger EventName="DropDownClosed">
                                            <command:EventToCommand CommandParameter="{Binding Id}"  Command="{Binding DataContext.SelectionChangedCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}"/>
                                        </i:EventTrigger>
                                    </i:Interaction.Triggers>
                                </ComboBox>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>


        //刷新下拉框数据
        public void Refresh_list(int id)
        {
            var fluidMaintainanceDatas = DataBase.GetFluidMaintainanceDatas();
            var performanceDatas=DataBase.GetDrillingFluidPerformanceDatas();
            var system = performanceDatas[id].DrillingFluidSystem;
            var temp = fluidMaintainanceDatas.Where(t => t.DrillingFluidSystem == system);
            var compositionDatas = temp.Select(t => t.Composition);
            Composition_list.Clear();
            foreach (var compositionData in compositionDatas)
            {
                Composition_list.Add(compositionData);
            }
        }

展开全部

  • 写回答

1条回答 默认 最新

  • 斯洛文尼亚旅游 2021-08-01 05:49
    关注

    没用过wpf,不过大概看了你的代码,下面加粗的是共用的吧,所以导致了清空后所有combobox都重新绑定了新的数据源。你看下api是否有获取当前combobox对象的方法,获取到combobox后,重新生成一个数据源来绑定,而不是共用一个。

                                <ComboBox  IsEditable="True" 
                                           Text="{Binding Composition,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                           ItemsSource="{Binding **DataContext.Composition_list**,Mode=Default, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid}}" >
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月1日
  • 已采纳回答 8月1日
  • 修改了问题 8月1日
  • 创建了问题 7月30日

悬赏问题

  • ¥15 代写uni代码,app唤醒
  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部