问题描述
控件的初始写法:
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}"
这样就可以了!
切换页面数据也不会丢失,保存的数据都是下拉框选中的了。