Trong điều khiển DataGrid của WPF, nếu bạn đặt cột cho một trong các loại cột mặc định (như DataGridTextColumn hoặc DataGridCheckBoxColumn), sắp xếp trên cột đó và sau đó thay đổi giá trị của nó, lưới sẽ tự động được sắp xếp lại.WPF DataGrid: Tự động sắp xếp lại trên DataGridTemplateColumn
Tuy nhiên, nếu bạn sử dụng DataGridTemplateColumn (và cho phép cột được sắp xếp), nó có thể được sắp xếp, nhưng thay đổi giá trị của ô trong cột này không làm cho lưới không được sắp xếp lại. Làm cách nào để tôi có thể tự động kích hoạt tính năng tự động kích hoạt sắp xếp lại?
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>
Binding:
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" });
Đây là lớp mục của tôi, chỉ trong trường hợp có liên quan:
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"); } }
}
vẻ khi được làm việc tốt cho tôi. Bạn có nghĩa là bạn thay đổi giá trị SortMemberPath cho DataGridTemplateColumn? –
Nó sắp xếp khi bạn bấm vào nó một cách rõ ràng, hoặc khi bạn thay đổi giá trị của cột FirstName, nhưng không sắp xếp lại khi bạn thay đổi giá trị cột LastName. Đặt SortMemberPath cho phép nó sắp xếp, nhưng không làm cho nó * tự động * sắp xếp lại, do đó vấn đề. –
Trong tình huống này, tôi quan sát những thay đổi của một tài sản cần thiết và được gọi là SomeCollectionViewOfGrid.Refresh(); – vorrtex