0

我有两个具有相同行数的 DataGrid。每行还有一个隐藏的整数字段/列,用于保持两者之间的 1-1 对应关系。当用户排序、选择或滚动时,一个 DataGrid 上的操作需要复制到另一个 DataGrid 上。我最关心排序,因为我担心 DataGrid 的排序操作可能会干扰或可能无法反映我自己在幕后的排序。保持这些观点的最佳方式是什么?

(这是一个测量程序,其中一个网格具有 x、y、z 坐标列表,而第二个列表具有应用了变换的相同点。由于屏幕空间的原因,这些点在两个选项卡之间拆分。)

4

1 回答 1

2

在大型数据集上排序可能很昂贵。如果屏幕空间是问题,您可以拥有一个包含一种类型项目的数据网格并切换项目模板以在两种视图之间切换。这种方式保留了屏幕空间,排序不会进行两次,并且您有一种非常可靠的方式来保持两个视图之间的排序同步。

达到效果的方法有很多,最好的方法要视具体情况而定。

一种方法是将两个不同<GridView>的 s 设置为资源,并选择在代码中或通过使用自定义转换器的 Binding 使用哪一个:

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

也可以使用 Binding 并跳过后面的代码。

另一种方法是为其中一个列项制作用户控件,其中用户控件可以以两种替代状态显示数据。

另一种可能性是使用ItemTemplateSelector

于 2013-02-18T22:22:42.127 回答