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 $parentDataGrid.((vm:ttvm)DataContext).type}"

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

parentUserControl

或者

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}"

这样就可以了!

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

相关推荐
初雪云21 小时前
UniApp 云打包拿到 IPA 后,真正的发布工作才刚开始
ios·自动化·编辑器·产品经理·iphone
幸运小圣2 天前
Buffer 新手入门【Node.js】
node.js·编辑器·vim
*wait for?2 天前
VScode使用uv-创建python虚拟环境
ide·vscode·编辑器
lzx_0022 天前
Linux 开发工具(二) 简单认识一下编辑器 —— vim
linux·编辑器·vim
golang学习记4 天前
VSCode AI完成任务的仪式感:撒礼花
ide·vscode·编辑器
mklpo1476 天前
在win7 sp1 系统上安装最新版 的 Visual Studio Code。2026-10-04
ide·vscode·编辑器
Highcharts.js7 天前
图表开发实战总结| 7 条“黄金法则”与“性能铁律”
前端·javascript·vue.js·编辑器·时序数据库·highcharts
广东帝工8 天前
智能防撞进入高增长周期:多技术融合推动桥梁防护从被动硬抗迈向主动预警时代
编辑器
星辰徐哥10 天前
鸿蒙平台 KDevelop 集成开发环境适配实战:基于 Electron 壳方案的跨平台多语言代码编辑器开发
electron·编辑器·harmonyos
风华同学11 天前
vscode远程连接
ide·vscode·编辑器