如何在两个行数相等的DataGrids(以及隐藏的1-1映射字段)之间保持行的重复顺序
本文关键字:字段 隐藏 之间 映射 顺序 DataGrids 两个 | 更新日期: 2023-09-27 18:00:12
我有两个行数相同的DataGrids。每行上还有一个隐藏的整数字段/列,用于保持两者之间的1-1对应关系。当用户排序、选择或滚动时,一个DataGrid上的操作需要复制到另一个上。我最关心的是排序,因为我担心DataGrid的排序操作可能会干扰或无法反映我自己在幕后的排序。保持这些观点的最佳方式是什么?
(它适用于一个测量程序,其中一个网格有一个x、y、z坐标列表,而第二个列表有相同的点,并应用了变换。由于屏幕不可用,这些点被分为两个选项卡。)
在大型数据集上,排序可能很昂贵。如果屏幕不动产是个问题,那么你可以有一个带有一种类型项目的数据网格,并切换项目模板以在两个视图之间切换。通过这种方式可以保留屏幕属性,排序不会重复两次,而且您有一种非常可靠的方法可以保持两个视图之间的排序同步。
有很多方法可以达到效果,最好的方法取决于具体情况。
一种方法是将两个不同的<GridView>
设置为资源,并选择在代码中或通过与自定义转换器的绑定来使用哪一个:
<Grid>
<Grid.Resources>
<GridView x:Key="DefaultView">
<GridViewColumn Width="120"....etc/>
</GridView>
<GridView x:Key="AlternativeView">
<GridViewColumn Width="50"....etc/>
</GridView>
</Grid.Resources>
<ListView x:Name="MyListView" ItemsSource="{Binding DisplayValues}" View="{StaticResource DefaultView}"/>
</Grid>
在后面的代码中,你可以切换视图,比如这样:
MyListView.View = isDefault ? MyListView.TryFindResource("DefaultView") : MyListView.TryFindResource("AlternativeView")
也可以使用绑定并跳过后面的代码。
另一种方法是为列项目之一制作用户控件,其中用户控件可以以两种可供选择的状态显示数据。
还有一种可能性是使用ItemTemplateSelector