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

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条回答 默认 最新

  • Go 旅城通票 2021-08-01 13: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日

悬赏问题

  • ¥50 基于TwinCAT3实现力传感器的实时读取
  • ¥20 python求解八元一次不定方程,无数解中随机输出几组即可(相关搜索:用python)
  • ¥50 libreoffice导出PPTX到PDF中的错误换行问题
  • ¥15 python实现网页视频下载
  • ¥15 如何通过深度图获得物体的完整、正确点云?
  • ¥15 有没有操作系统适用白丁的经典的书籍,如何解决?(标签-学习)
  • ¥15 Catia V5 R20 64位 安装过程中选择orbix配置创建套接字失败
  • ¥100 C51单片机设计交通灯时出现的问题
  • ¥15 R语言爬虫的时候元素和园代码不一样怎么解决呀
  • ¥15 SQL删除添加数据后序号不连续问题。