Dans le contrôle DataGrid de WPF, si vous définissez une colonne à l'un des types de colonne par défaut (comme DataGridTextColumn ou DataGridCheckBoxColumn), trier sur cette colonne, puis modifier sa valeur, la grille sera automatiquement re-trié. Toutefois, si vous utilisez un DataGridTemplateColumn (et autorisez le tri de la colonne), il peut être trié, mais la modification de la valeur d'une cellule dans cette colonne n'entraîne pas de nouveau tri de la grille. Comment puis-je l'amener à déclencher automatiquement un nouveau tri?WPG DataGrid: automatiquement re-trier sur un DataGridTemplateColumn
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>
Reliure:
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" });
Voilà ma classe de produit, juste au cas où 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 fonctionner très bien pour moi. Voulez-vous dire que vous modifiez la valeur SortMemberPath pour DataGridTemplateColumn? –
Il trie lorsque vous cliquez dessus explicitement, ou lorsque vous modifiez la valeur de la colonne Prénom, mais ne réorganise pas lorsque vous modifiez la valeur de la colonne Nom. Définir SortMemberPath lui permet de trier, mais ne le fait pas * automatiquement * re-trier, d'où le problème. –
Dans cette situation, j'ai observé les modifications d'une propriété nécessaire et appelé SomeCollectionViewOfGrid.Refresh(); – vorrtex