gpt4 book ai didi

c# - WPF 数据网格 : Automatically re-sort on a DataGridTemplateColumn

转载 作者:太空狗 更新时间:2023-10-29 21:19:57 31 4
gpt4 key购买 nike

在 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com