Dans la commande DataGrid de WPF, si vous définissez une colonne sur l'un des types de colonne par défaut (comme DataGridtextColumn ou DataGridCeckBoxColumn), trier sur cette colonne, puis modifier sa valeur, la grille sera automatiquement réglée.
Toutefois, si vous utilisez un datagridtemplatecolumn (et laissez la colonne à trier), il peut être trié, mais la modification de la valeur d'une cellule dans cette colonne ne provoque pas la grille n'est pas retirée. Comment puis-je le coaxer en déclenchant automatiquement une nouvelle sorte? strong> p> xaml: p> Reliure: P> 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"); } }
}
6 Réponses :
Je cherche aussi la réponse à cela. J'ai trouvé une solution: (pas content de ça, mais ...)
Lorsque votre collection est mise à jour, vous pouvez le faire: p> laide mais cela fonctionne. Vous voudrez stocker toute la collection contrairement à mon exemple qui ne fait qu'un premier article. P> Un problème avec elle est que le datagrid perd l'en-tête qui indique le tri, alors même s'il recèle correctement l'en-tête de la colonne est N'est plus sélectionné avec la flèche montrant la direction du tri. p> p>
Pas besoin de réinitialiser itemsSource code>. Dans mon application
SortDescriptions.Clear (); code> fonctionne parfaitement.
J'ai eu un datagrid en C # WPF sous VS2010 qui ne trierait pas quelles que soient les paramètres XAML. Pour une raison quelconque, ce datagrid caché (sur une languette secondaire) a eu des problèmes avec ordre de tri où le datagramme principal était bien avec des paramètres similaires. En tant que tel, je devais trier schématiquement le DataGrid. Voici mes notes:
d'abord le XAML pour les deux datagramrids (primaire et secondaire, nous ne trierons que le deuxième "noms étendus" grille: p> puis l'extrait de code pour trier la deuxième onglet DataGrid après un clic clic Retour à la première onglet puis re-visitez l'onglet 2nd. p> Ici, notre première colonne du Datagramrid est nommée "Nom". Le clic activé: P> if (!extendSorted)
{
SortDescription extSort = new SortDescription("Name", ListSortDirection.Ascending);
grdExtendedNames.Items.SortDescriptions.Add(extSort);
extendSorted = true;
}
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 rafraîchissant les éléments du DataGrid.
datagrid.items.refresh (). Cela restaure également le tri.
N'oubliez pas de définir la tridirection sur le DataGridColumn (dans ce cas, c'est un DataGridTextColumn) P> blockQuote>DataGrid Définition: p>
xxx pré> fichier CS: p>
xxx pré> p>
If DataGridMain.Items.SortDescriptions.Count > 0 Then Dim vSortDescColl As New SortDescriptionCollection For Each vSortDesc In DataGridMain.Items.SortDescriptions vSortDescColl.Add(vSortDesc) Next DataGridMain.ItemsSource = Nothing DataGridMain.ItemsSource = vCallColl For Each vSortDesc In vSortDescColl DataGridMain.Items.SortDescriptions.Add(vSortDesc) For Each vColumn In DataGridMain.Columns If vColumn.SortMemberPath = vSortDesc.PropertyName Then vColumn.SortDirection = vSortDesc.Direction Exit For End If Next Next End If
Je vous suggère d'ajouter un petit récit pour préférer votre code pour expliquer ce que vous faites et pourquoi vous ajoutez cette réponse à une question de deux ans.
Je sais que c'est vieux, mais j'ai aussi eu ce problème de DataGridTemplatecolumn Re-trier. Cela ne se produit pas sur DataGridTextColumn. La façon dont je répète espère que cela aide les gens. P> p>
Aucune de ces réponses a fonctionné pour moi en 2016.
Après quelques essais et que je suis venu avec cela et il semble fonctionner simplement bien: P>
dataGrid.Items.IsLiveSorting = true;
Semble travailler bien pour moi. Voulez-vous dire que vous modifiez la valeur de typeMemberPath pour le DataGridTemplatecolumn?
Il trie lorsque vous cliquez sur le bouton explicitement, ou lorsque vous modifiez la valeur du prénom Colum, mais ne résiste pas lorsque vous modifiez la valeur de la valeur de la dernière nom. Réglage du sortmemberpath permet de trier, mais ne le fait pas automatiquement i> Re-trier, d'où le problème.
Dans cette situation, j'ai observé des changements d'une propriété nécessaire et appelé SomécollectionViewOfgrid.refresh ();