Сортировка по столбцу сетки данных с привязанными данными и конвертером

Я пытаюсь отсортировать данные в сетке данных, но когда я нажимаю на заголовок столбца, который связан с конвертером, ничего не происходит. Я использую шаблон MVVM. Пример прилагается ниже. В этом примере сетка показывает столбец (Тип), который отображает тип человека, и поэтому я использую конвертер (класс TypeValueConverter). Когда я использую этот конвертер, сетка не сортирует тип столбца.

<Window x:Class="GridSort.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:GridSort"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid ItemsSource="{Binding People}" AutoGenerateColumns="False">
            <DataGrid.Resources>
                <my:TypeValueConverter x:Key="typeConverter" />
            </DataGrid.Resources>
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding FirstName}" Header="FirstName" />
                <DataGridTextColumn Binding="{Binding Surname}" Header="Surname" />
                <DataGridTextColumn Binding="{Binding Converter={StaticResource ResourceKey=typeConverter}}" Header="Type" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>
public class ViewModel
{
    private ICollection<Person> people;
    public ICollection<Person> People
    {
        get
        {
            if (this.people == null)
            {
                this.people = new List<Person>();
                this.people.Add(new Student() { FirstName = "Charles", Surname = "Simons" });
                this.people.Add(new Student() { FirstName = "Jake", Surname = "Baron" });
                this.people.Add(new Teacher() { FirstName = "John", Surname = "Jackson" });
                this.people.Add(new Student() { FirstName = "Patricia", Surname = "Phillips" });
                this.people.Add(new Student() { FirstName = "Martin", Surname = "Weber" });
            }

            return this.people;
        }
    }
}

public class TypeValueConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
            {
                return DependencyProperty.UnsetValue;
            }

            return value.GetType().Name;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

public abstract class Person
    {
        public string FirstName
        {
            get;
            set;
        }

        public string Surname
        {
            get;
            set;
        }
    }

    public class Student : Person
    {
    }

    public class Teacher : Person
    {
    }

Ответы на вопрос(3)

Ваш ответ на вопрос