gpt4 book ai didi

WPF DataGrid 忽略 SortDescription

转载 作者:行者123 更新时间:2023-12-02 16:35:53 24 4
gpt4 key购买 nike

我在这里遇到了一个关于 WPF DataGrid(.NET 4.0 中的 System.Windows.Controls.DataGrid)排序的奇怪问题。

它的 ItemsSource 绑定(bind)到 datacontext 对象的属性:

<DataGrid HeadersVisibility="Column" SelectedIndex="0" MinHeight="30" ItemsSource="{Binding FahrtenView}" AutoGenerateColumns="False" x:Name="fahrtenDG">

FahrtenView 看起来像这样:

    public ICollectionView FahrtenView
{
get
{
var view = CollectionViewSource.GetDefaultView(_fahrten);
view.SortDescriptions.Add(new SortDescription("Index", ListSortDirection.Ascending));
return view;
}
}

DataGrid 已排序。然而,它仅在第一次分配 DataContext 时才会进行排序。之后,更改 DataContext(通过在数据层次结构中选择另一个“父”对象)仍然会导致对属性 FahrtenView 进行评估(我可以放入 BP,调试器会在那里停止),但添加的排序描述将被完全忽略,因此排序不会不再工作了。

即使在每个 DataContextChange 上调用 fahrtenDG.Items.Refresh() 也无济于事。

我非常确定这就是对 WPF DataGrid 进行排序的正确方法,不是吗?那么,为什么它在第一次被调用时就完美地完成了工作,却如此顽固地拒绝工作呢?

有什么想法吗?我将非常感激。

干杯,亨德里克

最佳答案

我从 DataGrid 继承来简要了解它的内部结构。我发现,由于一些神秘的原因,尽管第一次调用 OnItemsSourceChanged 时,一切看起来都很好,在每次调用 OnItemsSourceChanged 时,ItemsSource 的 SortDescription 列表 Collection View 为空

因此,我添加了一个在 OnItemsSourceChanged 末尾调用的自定义 SetupSortDescription 事件。现在我在事件处理函数中添加排序描述,这就像一个魅力。

我认为这是 WPF 工具包 DataGrid 中的一个错误。

这是我重写的 OnItemsSourceChanged

    protected override void OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue)
{
if (SetupSortDescriptions != null && (newValue != null))
SetupSortDescriptions(this, new ValueEventArgs<CollectionView>((CollectionView)newValue));

base.OnItemsSourceChanged(oldValue, newValue);
}

关于WPF DataGrid 忽略 SortDescription,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177351/

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