WPF DataGrid: Automatiquement re-trier sur un DataGridTemplateColumn
Dans WPF du contrôle DataGrid, si vous définissez une colonne à l'un de la colonne par défaut des types (comme DataGridTextColumn ou DataGridCheckBoxColumn), tri sur cette colonne, puis modifiez sa valeur, la grille sera automatiquement re-triés.
Toutefois, si vous utilisez un DataGridTemplateColumn (et permettent à la colonne à trier), il peut être triée, mais en changeant la valeur d'une cellule de cette colonne n'est pas la cause de la grille n'est pas triée. Comment puis-je coaxial dans automatiquement le déclenchement d'une re-trier?
XAML:
<DataGrid Name="grid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="First name" Binding="{Binding First}"/>
<DataGridTemplateColumn Header="Last name" SortMemberPath="Last">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Last}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
De liaison:
ObservableCollection items = new ObservableCollection();
grid.ItemsSource = items;
items.Add(new Character() { First = "Homer", Last = "Simpson" });
items.Add(new Character() { First = "Kent", Last = "Brockman" });
items.Add(new Character() { First = "Montgomery", Last = "Burns" });
Voici ma classe de l'élément, juste au cas où c'est pertinent:
public class Character : INotifyPropertyChanged {
private string first, last;
public event PropertyChangedEventHandler PropertyChanged;
private void Notify(string name) {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public string First { get { return first; } set { first = value; Notify("First"); } }
public string Last { get { return last; } set { last = value; Notify("Last"); } }
}
Semble bien fonctionner pour moi. Voulez-vous dire que vous changer la SortMemberPath de la valeur pour l'DataGridTemplateColumn?
Il trie lorsque vous explicitement cliquez dessus, ou lorsque vous modifiez la valeur de la colonne FirstName, mais n'a pas de re-trier lorsque vous modifiez la valeur de la colonne LastName. Réglage de la SortMemberPath permet de faire le tri, mais ce n'est pas ça automatiquement re-trier, d'où le problème.
Dans cette situation, j'ai observé des changements de propriété et appelé SomeCollectionViewOfGrid.Refresh();
Il trie lorsque vous explicitement cliquez dessus, ou lorsque vous modifiez la valeur de la colonne FirstName, mais n'a pas de re-trier lorsque vous modifiez la valeur de la colonne LastName. Réglage de la SortMemberPath permet de faire le tri, mais ce n'est pas ça automatiquement re-trier, d'où le problème.
Dans cette situation, j'ai observé des changements de propriété et appelé SomeCollectionViewOfGrid.Refresh();
OriginalL'auteur Joel Rein | 2010-10-24
Vous devez vous connecter pour publier un commentaire.
Je suis aussi à la recherche de la réponse à cette question. J'ai trouvé une solution: (pas heureux avec elle, mais...)
Lors de votre collection est mise à jour que vous pouvez faire ceci:
Laid, mais il ne fonctionne pas. Vous souhaitez stocker la totalité de la collection (contrairement à mon exemple qui est le premier élément.
Un problème avec elle, c'est que la grille de données perd de l'en-tête qui indique le genre, de sorte que même les stations correctement l'en-tête de colonne n'est plus sélectionnée avec la flèche indiquant la direction de la sorte.
ItemsSource
. Dans mon applicationSortDescriptions.Clear();
au lieu de cela fonctionne parfaitement.OriginalL'auteur Kelly
Je sais que c'est vieux, mais aussi j'ai eu ce DataGridTemplateColumn re-trier problème. Cela ne se produit pas sur DataGridTextColumn. La façon dont je le fixer avec intact le sens de tri sur la colonne d'en-tête est:
Espère que cela aide les gens.
OriginalL'auteur Peter
Aucune de ces réponses a fonctionné pour moi en 2016.
Après quelques try&erreur je suis venu avec cette et il semble fonctionner parfaitement:
OriginalL'auteur wotanii
J'ai eu un DataGrid en C# WPF sous VS2010 qui ne serait pas trier quel que soit le XAML paramètres. Pour certaines raisons, cette cachées DataGrid (sur un onglet secondaire) a été d'avoir des problèmes avec l'ordre de tri où la principale grille de données était très bien avec des paramètres similaires. En tant que tel, j'ai dû sous forme de diagramme de tri de la grille de données. Voici mes notes:
D'abord le code XAML pour les deux composants Datagrid (primaire et secondaire), nous allons uniquement tri le second "des noms à rallonge" de la grille:
Puis l'extrait de code pour trier le deuxième onglet grille de données après un clic. Nous ne tri la première fois, c'est pourquoi le booléen est ici. De cette façon, si elles le tri sur la colonne autre(s) manuellement, il est conservé, même si elles remontent à la première tab, puis re-visiter la 2e onglet.
Ici notre première colonne dans la grille de données est nommé "Nom". Le Clic de l'extrait:
Espère que ça aide quelqu'un d'autre sorte leur grille de données via le code. La plupart des autres exemples que nous avons trouvé a bien fonctionné pour de simples paramétrages, mais dans ce double-grille de données des onglets de l'installation, il jeta le tri de contrôle.
OriginalL'auteur Lance Cleveland
J'ai eu un problème similaire, lors de l'insertion d'une nouvelle ligne dans un DataGrid.
J'ai résolu ce problème en actualisant les éléments de la grille de données.
Définition de grille de données:
CS fichier:
OriginalL'auteur Pendl
OriginalL'auteur Jeffrey