私はWPF-Datagridを使用するWPFアプリケーションを持っています。列見出しをクリックすると列を並べ替えることができ、自動的に動作します。私が望むのは、プログラムの開始時に列をプログラムで選択して並べ替えることです。別の言い方をすると、私はユーザーが列見出しをクリックしたように思っていますが、プログラマチックに、MVVMの方法で、コードの変更を省略しています。そのための解決策はありますか?WPF DataGrid:列をプログラム的にMVVMの方法でソートしますか?
0
A
答えて
0
リストがある場合はLinqクエリを使用し、DataTablesを使用している場合はMyRows = myTable.Select(strExpr、strSort);を使用します。
まず、あなたがしてソートする列を選択する必要があり、その後のviewmodelで、あなたは使用することができますすることができますいずれかのLINQ ormyTable.Select(strExpr、strSort)
例コード
switch(columnname)
{
case "name":
break;
case "FatherName"
break;
}
4
は私が推測しますこれを行う「MVVM Way」は、DataGridをオブジェクトコレクションを表すCollectionView
にバインドしており、SortDescription
プロパティを使用して並べ替えを管理できます。
private ObservableCollection<Entity> _entityCollection = null;
public ObservableCollection<Entity> EntityCollection
{
get
{
return _entityCollection;
}
set
{
_entityCollection = value;
RaisePropertyChanged("EntityCollection");
RaisePropertyChanged("CollectionView");
}
}
注上記RaisePropertyChanged("CollectionView")
:
は、例えば、あなたのviewmodelにあなたはオブジェクトのコレクション持っているあなたのコレクションの変更を、ビューはcollectionviewが同様に変更されたことを通知する必要があります。
ので、代わりのコレクションに直接データグリッドをバインドしますが、このような読み取り専用collectionviewプロパティ定義:変更したい場合は最後に
<DataGrid ItemsSource="{Binding Path=CollectionView}">
:
private CollectionView _collectionView = null;
public CollectionView CollectionView
{
get
{
_collectionView = (CollectionView)CollectionViewSource.GetDefaultView(EntityCollection);
if (_collectionView != null)
_collectionView.SortDescriptions.Add(new SortDescription("PropertyName", ListSortDirection.Ascending));
return _collectionView;
}
}
次に、あなたがあなたのデータグリッドをバインドしますコレクションがソートされるプロパティは、コレクションビューの並べ替えをクリアし、次のように新しいものを追加する必要があります。
_collectionView.SortDescriptions.Clear();
_collectionView.SortDescriptions.Add(new SortDescription("NewPropertyName", ListSortDirection.Ascending));
関連する問題
- 1. DataTableをDataGridにバインドします。 WPF MVVM
- 2. WPF DataGrid(MVVM)のScrollIntoView
- 3. WPF MVVM DataGridから別のDataGrid行へ
- 4. WPF、MVVMでDatagridの行をプログラムで表示する
- 5. WPF、MVVM DataGrid行バインド
- 6. WPF MVVM - DataGridセルクリック、列ヘッダーを取得
- 7. WPF Datagrid:列のソートをクリアする
- 8. WPF MVVMのDataGridセルのComboBox
- 9. WPF Datagridに列と行をプログラムで追加します。
- 10. CollectionViewSource WPF DataGrid用MVVM実装
- 11. C#wpf mvvm datagrid edit cells
- 12. ComboBoxを使用したWPF MVVM DataGridフィルタリング
- 13. WPF:動的列でDataGridバインディングを編集する方法
- 14. WPF MVVMで静的データをDataGridに取り込む最良の方法は何ですか?
- 15. mvvmを使用したDataGridへの動的列によるバインド
- 16. WPF Datagridで整数列をソートできません
- 17. DataGrid CollectionViewSourcesをソートするためのWPF ListCollectionViewの作成方法
- 18. C#WPFソートDataGridのXAML側
- 19. WPF Datagridのソートとフィルタリングオプション?
- 20. wpf(mvvm)のDataGridへのチェックボックスのバインド
- 21. WPFのDataGrid検証の問題 - MVVM
- 22. C#WPFでプログラムでDataGridを作成する方法は?
- 23. WPF DataGridでの動的列の生成
- 24. WPF MVVM ObservableCollection/DataGrid複数のSQLテーブル
- 25. c#wpf mvvm DataGridパスへのハイパーリンク
- 26. WPF MVVM Light列を動的に管理するためにDataGrid AutogeneratingColumnイベントをトリガーできません
- 27. WPF DataGridをグループ内の値でソートします。
- 28. プログラムで行ヘッダーを設定する方法DataGrid WPF
- 29. WPF Datagrid列ヘッダーを動的に変更します。
- 30. WPF DataGridのDataGridヘッダーチェックボックスで列のすべてのCheckBoxを選択する方法
したがって、ユーザーは列ヘッダーをクリックしても、並べ替えコードはビューモデルにする必要がありますか? –
Timothy、いいえ、私はあなたが誤解していたと思います。ユーザーが列見出しを押したという要件なしで、プログラムで並べ替えを実行します。別の言い方をすると、私のDataGridのデフォルトソートです。はい、列の見出しが正しいソート方向を示しています。 – Erik