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();

OriginalL'auteur Joel Rein | 2010-10-24