gpt4 book ai didi

c# - WPF 数据网格 : Specify a default sort

转载 作者:太空狗 更新时间:2023-10-29 23:38:21 28 4
gpt4 key购买 nike

我有一个 UserControl,它基本上只包含一个 DataGrid。在此 DataGrid 中,我有一个事件列表(严重性 - 日期 - 消息)。用户控件通过 MVVMLight ToolkitViewModelLocator 进行绑定(bind)。

我添加了两件事:

在我的 UserControl 资源中:

<UserControl.Resources>
<CollectionViewSource x:Key="SortedEvents" Source="{Binding Events}">
<CollectionViewSource.SortDescriptions>
<componentModel:SortDescription PropertyName="EventTime" Direction="Descending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</UserControl.Resources>

由 DataGrid 使用:

<DataGrid ItemsSource="{Binding Source={StaticResource SortedEvents}}" AutoGenerateColumns="False" >

我还在 DataGridTextColumn.SortDirection 上设置了 SortedDirection:

<DataGridTextColumn Binding="{Binding EventTime}"  Header="Time" IsReadOnly="True" SortDirection="Descending"/>

当我检查设计器时,我看到小箭头表明 DataGrid 已正确排序。

但是当我启动应用程序时,列表没有排序,箭头不在这里。如果我单击该列对其进行排序,它会正确排序所有内容,它只是默认值,但似乎不起作用。

我错过了什么? (这个 dataGrid/column 甚至没有命名,所以我不能尝试通过其他东西来编辑它们)。

(最初我只有 DataGridTextColumn 上的 SortDirection。结果相同)

最佳答案

关于“小箭头”在这里打勾: ColumnHeader arrows not reflected when sorting a DataGrid in XAML

对于更复杂的答案:Pre-sorting a DataGrid in WPF

我认为主要部分是:

NOTE: the "scm" namespace prefix maps to System.ComponentModel where the SortDescription class lives.

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"

编辑

只要 ItemsSource 发生变化,DataGrid 就会删除 SortDescriptions 和 GroupDescriptions。这是必要的,因为与其他 ItemsControl 不同,DataGrid 本身会在用户单击列标题时添加 SortDescriptions,如果它们与新的 ItemsSource 不兼容,则保持原样可能会崩溃。

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

base.OnItemsSourceChanged(oldValue, newValue);
}

关于c# - WPF 数据网格 : Specify a default sort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29670322/

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