Avalonia 中DataGrid以Combobox作为单元格切换页面时数据丢失问题

问题描述

控件的初始写法:

XML 复制代码
                           <DataGridTemplateColumn Header="类型" Width="134">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <ComboBox
                                                BorderThickness="0"
                                                Width="110"
                                                Background="Transparent"
                                                HorizontalAlignment="Center"
                                                ItemsSource="{Binding $parent[DataGrid].((vm:ttvm)DataContext).typeItemSource}"
                                                
                                                SelectedItem="{Binding typeRow,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged   }">
                                            </ComboBox>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>

ItemsSource="{Binding $parent[DataGrid].((vm:ttvm)DataContext).type}"

大概是ItemsSource这里的绑定出现了问题、尝试用

parent[UserControl]

或者

parent

均不行

应用场景,如题,其中下拉框的ItemsSource绑定的属性是vm中的一个List集合,其位置与DataGrid的ItemsSource同级

现象描述:

初始进页面时一切正常,datagrid数据能够正常显示。

存在问题1:当滚轮滚到最低又滚回最上层时,第一个行该下拉框数据会消失(数据滚动出了控件的可视范围外?)

存在问题2:切换到其他页面又切换回来时,可视范围内的下拉框数据均会消失

这个可视范围,就是当前DataGrid能够显示的行数的范围。

(对于DataGridRow,打开devtool,选中一行进行滚动,可以看见row会动态生成,这是阿瓦的datagrid默认开虚化来着。)

这个消失,是真的消失,控制台对ItemsSource绑定属性的输出如下:

我尝试在set处设置断点,只有第一次进页面正常命中,切换页面或者滚动表格后,数据消失,都不会触发断点。

此时点击保存数据到数据库,是真的会存入这个空荡荡的 null或者空格 进去。

解决方法

稀里糊涂的搞定了,总结就是,给ItemsSource指定一个UserControl的名称(我有多个页面Page同时缓存存在(打开过的),Page就是UserControl,可能切换回来以后,找不到正确的UserControl?),以#形式做绑定

1:在页面标签处给UserContorl 声明一个名字,Name或者x:Name

2:更新ItemsSource写法

复制代码
ItemsSource="{Binding #用户控件名称.((vm:ttvm)DataContext).typeItemSource}"

这样就可以了!

切换页面数据也不会丢失,保存的数据都是下拉框选中的了。

相关推荐
袋子(PJ)1 天前
2026年常见的配置文件格式——为什么程序员永远在折腾缩进和括号?—— 常见配置文件进化史(md文档很详细)
编辑器
AI进化营-智能译站2 天前
Jazzy ROS2入门指南系列05-配置VsCode实现ROS2项目开发
ide·vscode·ai·编辑器
小短腿的代码世界2 天前
Qt量化策略编辑器深度解析:从DSL解析到可视化编排的完整架构
qt·架构·编辑器
咬人喵喵2 天前
五一劳动节 SVG 交互图文案例大全
低代码·微信·编辑器·交互·svg
啾啾啾6662 天前
VScode用cookie登录时,输入cookie值后按回车没反应
ide·vscode·编辑器
Misnice2 天前
Cursor 常用快捷键总结
编辑器
望眼欲穿的程序猿3 天前
苹果系统使用VsCode开发QT
ide·vscode·编辑器
其实防守也摸鱼3 天前
带你了解与配置phpmyadmin
笔记·安全·网络安全·pdf·编辑器·工具·调试
Rsun045513 天前
Oracle中常用语法
编辑器
非黑皆白3 天前
配置Vscode Claude Code 插件使用deepseek-v4-pro模型
ide·vscode·编辑器