WPF DataGrid: автоматическая повторная сортировка по DataGridTemplateColumn

В элементе управления WPF DataGrid, если вы установите для столбца один из типов столбцов по умолчанию (например, DataGridTextColumn или DataGridCheckBoxColumn), выполните сортировку по этому столбцу, а затем измените его значение, сетка будет автоматически пересортирована.

Однако, если вы используете 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>

Привязка:

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" });

Вот мой класс элемента, на всякий случай, это важно:

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
задан Joel Rein 25 October 2010 в 02:15
поделиться