DataGrid SortDirectionが無視される

私は起動時にデフォルトの順序を指定したいが、列見出しをクリックして並べ替えることができる。悲しいことに、SortDirectionプロパティが設定されているときは無視されます。つまり、正しい列ヘッダーの矢印が表示されますが、ソートされるものはありません。

ヘッダーを手動でクリックすると、データが正しくソートされるので、ソート自体ではありません。これは私が使用している単純化されたバージョンです:


    
        
        
    

アップデート:SortDescriptionsをICollectionViewに追加してみましたが、良い結果は得られませんでした。これは、コレクションに新しいアイテムを動的に追加するという事実と関係がありますか?私。起動時にリストが空でゆっくりと塗りつぶされていて、たぶんsortdescriptionは一度だけ適用されますか?

10

4 答え

Take a look at this MSDN Blog

上のリンクから:

DataGridColumn.SortDirectionは実際に列をソートしません。
  DataGridColumn.SortDirectionは、DataGridColumnHeaderのビジュアル矢印をキューに表示するか、表示するか、表示しないかを示すために使用されます。 DataGridColumnHeaderをクリックする以外の列を実際に並べ替えるには、DataGrid.Items.SortDescriptionsをプログラムで設定します。

9
追加された
datagrid.Items と私が使用している実際のICollectionViewの両方で試しましたが、結果は同じです:否定:(
追加された 著者 Voo,
2番目の考えでは:これは私に動的に新しい項目をリストに追加することと関係しているのでしょうか?
追加された 著者 Voo,
あなたの助けをありがとう - あなたの最初のアイデアは、とにかく右だったことが判明、私はちょうど混乱してプロパティとヘッダー名を持って、wpfは存在しないプロパティの一刻でソートする問題はありません。そのために残念。
追加された 著者 Voo,
@Vooこれを見たいかもしれません MSDNブログを参照してください。 EssentialyはSortDescriptionを保存し、それを再適用して強制的にリゾートを強制します。
追加された 著者 Mark Hall,
問題ありません、私はそれが助けてうれしいです。
追加された 著者 Mark Hall,
この非常に明確な答えをありがとう!
追加された 著者 Eric Ouellet,

私はこれに個人的な経験はありませんが、これはかなり役に立つ記事です。

基本的には、 SortDescription を追加する必要があります。 DataGridがバインドされているCollectionViewSourceに渡します。

4
追加された
@ Xcalibur私は私のwpf/xaml /どんなlingoが少し限られていることを恐れるので、あなたはそれを翻訳することができますか?とにかく、 datagrid.Items とDataGridがソースとして成功していないICollectionViewの両方にSortDescriptionsを追加しようとしました。
追加された 著者 Voo,
ここでも同様に、それは失われていません:これは私に動的に新しい項目をリストに追加することと関係がありますか?
追加された 著者 Voo,
それが解決策だったことが分かりました。私はPropertyとColumnHeaderの名前を混乱させました。それは残念です。だからこそ私は弦を使って作業するのが好きではない:
追加された 著者 Voo,
@ Xcalibur37:修正をありがとう、私は答えを更新しました。
追加された 著者 competent_tech,
CVSを作成してObservableCollectionではなくソート方向を追加します。 OCはMoveメソッドを使用して行をソートします。
追加された 著者 Xcalibur37,
申し訳ありませんVoo、問題ありません。私は、ObservableCollectionではなく、SortViewをCollectionViewSourceに追加することを指摘していました。マイクロソフトでは、「データグリッド内のアイテムの並べ替え」で詳しく説明しています。 msdn。 microsoft.com/en-us/library/ff407126.aspx
追加された 著者 Xcalibur37,
喜んで助けてください。私はあなたがこの問題を解決する方法について正しい考えを持っていると思います。
追加された 著者 Xcalibur37,

この記事はとても役に立ちました。私はそれを使ってやや簡単な解決策を見つけました。ここに私の解決策のスニペットが働いた。

XAML

        

                              

                

                
            
        

コード

   //Using a DependencyProperty as the backing store for ViewModel.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ViewModelProperty =
        DependencyProperty.Register("ViewModel", typeof(LogViewerViewModel), typeof(LogViewerControl),
           new UIPropertyMetadata(null,pf_viewModelChanged));

    private static void pf_viewModelChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        var control = (LogViewerControl)o;

        control.ColTimeStamp.SortDirection = ListSortDirection.Descending;

        var vm = e.NewValue as LogViewerViewModel;

        if (vm != null)
        {   
            ICollectionView collectionView = CollectionViewSource.GetDefaultView(vm.LogLister.Logs);
            collectionView.SortDescriptions.Add(new SortDescription("TimeStampLocal", ListSortDirection.Descending));
        }
    }
2
追加された

その短さは、それを行うためのすばやく簡単な方法がないということです。 ObservableCollectionsでMoveメソッドを使用する独自のカスタムソートを作成しました。私は "DataGridSorting"イベントをオーバーライドし、これを容易にする独自のメソッドを呼び出します。私はあなたの質問にあまりにも爆発的だと思うので、私はここにコードを掲載するつもりはありません。

CollectionViewSourceとSortDescription(competent_techが最初に投稿された)を使用して、上記のコメントに固執すると思います。

1
追加された