WPFのDataGridコントロールで、列をデフォルトの列タイプ(DataGridTextColumnやDataGridCheckBoxColumnなど)の1つに設定し、その列で並べ替えてからその値を変更すると、グリッドが自動的に再並べ替えられます。
ただし、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"); } }
}