クライアントには、この要件があります。 つまり、折りたたみ可能な列を含むグリッドです。私が見つけた最も簡単な方法は、3つの別々のデータグリッドと2つのボタンを持って、グリッドを表示または折りたたむことです。これが正しく動作しているデータグリッドのソートを別のデータグリッドに適用する
<StackPanel Orientation="Horizontal" Grid.Column="2" Grid.Row="0" VerticalAlignment="Stretch">
<toolkit:DataGridDragDropTarget VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch">
<sdk:DataGrid Name="Grid1" SelectionChanged="Grid_SelectionChanged" AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding somefield}" Header="someheader" />
<sdk:DataGridTextColumn Binding="{Binding somefield}" Header="someheader" />
<sdk:DataGridTextColumn Binding="{Binding somefield}" Header="someheader"/>
<sdk:DataGridTextColumn Binding="{Binding somefield}" Header="someheader" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</toolkit:DataGridDragDropTarget>
<Button Content=">" Click="Button_Click" Name="btn1" />
<sdk:DataGrid Name="Grid2" SelectionChanged="Grid_SelectionChanged" AutoGenerateColumns="False" ItemsSource="{Binding ItemsSource, ElementName=Grid1}">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="someheader" Binding="{Binding somefield}" />
<sdk:DataGridCheckBoxColumn Header="someheader" Binding="{Binding somefield}" />
<sdk:DataGridCheckBoxColumn Header="someheader" Binding="{Binding somefield}" />
<sdk:DataGridTextColumn Header="someheader" Binding="{Binding somefield}" />
<sdk:DataGridTextColumn Header="someheader" Binding="{Binding somefield}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
<Button Content=">" Name="btn2" Click="Button_Click"/>
<sdk:DataGrid Name="Grid3" SelectionChanged="Grid_SelectionChanged" AutoGenerateColumns="False" ItemsSource="{Binding ItemsSource, ElementName=Grid1}">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="someheader" Binding="{Binding somefield}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</StackPanel>
:ここ
は、関連するXAMLです。私の問題は、グリッドの1つをソートするときに発生します。並べ替えはデータグリッドの内部にあるので、変更は他のものに伝播されません(同じソースにバインドされていても厳しいです)。
ソートを他のグリッドに「伝播」する方法はありますか?ソートイベントをインターセプトする方法を見つけようとしましたが、存在しないようです...
ありがとうございます!
質問はSilverlightについてです。 –
まだ私は、1つのDataGridを使用して列の可視性を変更する方が良いと考えています。これにより、バインド元をソートしない限り、データグリッドにソートをプログラムで適用することができないため、データグリッドのソート方法を見つける手間が省けます。 したがって、データグリッドソートのイベントを発生させることはできません。また、C#/ silverlight(バインディング)をデータ列にソートすることもできません。 –
スペックが変更され、グリッド内のボタンが消えて、代わりにあなたが言ったことが提案されます(余分な列を隠す/表示する単一のボタン)。とにかくこのことについて考えてくれてありがとう:-) – Shimrod