作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 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>
绑定(bind):
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"); } }
}
最佳答案
我也在寻找这个问题的答案。我找到了一个解决方案:(对此并不满意,但是......)
当您的收藏更新时,您可以这样做:
SortDescription sortDescription = grdData.Items.SortDescriptions[0];
grdData.ItemsSource = null;
grdData.ItemsSource = Data;
grdData.Items.SortDescriptions.Add(sortDescription);
丑陋但它确实有效。与我仅存储第一项的示例不同,您将希望存储整个集合。
但它的一个问题是 DataGrid 丢失了指示排序的标题,因此尽管它正确地求助,列标题不再被选中,箭头显示排序的方向。
关于c# - WPF 数据网格 : Automatically re-sort on a DataGridTemplateColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008200/
我是一名优秀的程序员,十分优秀!