0

行数が同じ 2 つの DataGrid があります。2 つの間の 1 対 1 の対応を維持するために、各行に非表示の整数フィールド/列もあります。ユーザーが並べ替え、選択、またはスクロールするとき、1 つの DataGrid でのアクションを別の DataGrid で複製する必要があります。DataGrid の並べ替え操作が干渉したり、舞台裏で自分の順序付けを反映したりしないのではないかと心配しているため、並べ替えについて最も心配しています。これらのビューを維持する最善の方法は何ですか?

(これは、1 つのグリッドに x、y、z 座標のリストがあり、2 番目のリストに変換が適用された同じポイントがある測量プログラム用です。これらは、画面のスペースの関係で 2 つのタブに分割されています。)

4

1 に答える 1

2

大規模なデータセットでは、並べ替えに費用がかかる場合があります。画面のスペースが問題になる場合は、1つのタイプのアイテムを含む1つのデータグリッドを作成し、アイテムテンプレートを切り替えて両方のビューを切り替えることができます。このようにして、画面の資産が保持され、並べ替えが2回行われることはなく、両方のビュー間の並べ替えを同期しておくための非常に信頼性の高い方法があります。

効果を達成する方法はたくさんありますが、最善のアプローチは特定の状況によって異なります。

1つのアプローチは、2つ<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")

Bindingを使用して、コードビハインドをスキップすることもできます。

別のアプローチは、ユーザーコントロールが2つの代替状態でデータを表示できる列アイテムの1つに対してユーザーコントロールを作成することです。

さらに別の可能性は、 ItemTemplateSelectorを使用することです

于 2013-02-18T22:22:42.127 に答える