Silverlight DataGridで初期ソート順を設定しますか?
-
03-07-2019 - |
質問
Silverlight DataGridコントロールに最初にデータを読み込むときに、ユーザーが最初の列のヘッダーをクリックしたように画面を正確に表示するにはどうすればよいですか?言い換えると、データはその列の値に従って昇順で並べ替えられる必要があり、小さな並べ替え矢印が最初の列のヘッダーに表示される必要があります。
それが可能だと仮定して、ユーザーが最初の列をクリックしてからShiftキーを押しながら2番目の列をクリックしたように見せることもできますか?言い換えれば、2つの部分からなる並べ替えをプログラムで適用して、ユーザーが行ったように画面を表示することはできますか?
解決
私もこれを行う必要があり、DataGridでこれができるかどうかを深く深く見ていた。
実際には、DataGridColumnHeaderクラスには適切なメソッド、つまりInvokeProcessSortがありますが、これは内部であり、DataGridクラスの他の場所には表示されません。
できることは、バインドする直前にデータを事前に並べ替えることだけです。 ICollectionViewとObservableCollection <!> lt; <!> gt;を実装するカスタムデータコレクションを使用していますが、これは正常に機能しますが、最適ではなく、必ずしも必要とされない作業負荷です。
また、事前に並べ替えられたコレクションを提供することは、グリッドに並べ替えマーカーが表示されないことを意味します。
これをDataGridバグトラッカーの問題として提起します-これは修正が非常に簡単なかなり大きな省略です-MSはDataGridColumnおよびDataGridクラスの適切なメソッドを公開する必要があります。
他のヒント
これは私の解決策でした:
if (pcv.CanSort == true)
{
pcv.SortDescriptions.Add(new SortDescription("ProductionStatus", ListSortDirection.Ascending));
pcv.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending));
}
、ここでpcvはPageCollectionViewです。これは、最初にProductionStatusプロパティでソートされ、次にソートされます 日付プロパティ。ただし、2番目の列にのみ小さなソート矢印が表示されます。
これを解決してくれたPaul Sherrifによる良い記事を見つけました...
http:// weblogs。 asp.net/psheriff/archive/2010/07/14/use-collectionviewsource-in-silverlight.aspx
基本的に、とにかくDataGridをCollectionViewSourceにバインドしていました。これには、デフォルトのソート順を指定できるようにするCollectionViewSource.SortDescriptionsセットの構成があります。
ポールに感謝!
DomainDataSourceにSortDescriptorを追加するだけです:
<riaControls:DomainDataSource.SortDescriptors>
<riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
</riaControls:DomainDataSource.SortDescriptors>
Silverlight 3+にはCollectionViewSourceが存在します
http:/ /msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v=vs.95).aspx
Microsoftが提案するように、XAMLでデフォルトのソート順を定義する簡単な方法があります:
CollectionViewSourceを使用してマークアップでソートを宣言する
<Window.Resources>
<app:MyData x:Key="MyData"/>
<CollectionViewSource x:Key="cvs" Source={StaticResource MyData}>
<CollectionViewSource.SortDescriptions>
<SortDescription Property="Name"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>
<DataGrid ItemsSource="{Binding Source={StaticResource cvs}}"/>
Microsoftのサンプルに対する私の修正:
<sort:SortDescription
PropertyName="Name"
Direction="Ascending"
xmlns:sort="clr-namespace:System.ComponentModel;assembly=System.Windows"
/>