gpt4 book ai didi

WPF4 Datagrid 不对列标题进行排序

转载 作者:行者123 更新时间:2023-12-03 23:25:19 26 4
gpt4 key购买 nike

我正在尝试使用 MVVM 设计模式来实现我的第一个 WPF 应用程序。

我创建了一个数据绑定(bind)到 ObservableCollection<> 的应用程序。应用程序呈现良好,但我希望数据网格在我单击列标题时重新排序行。

我研究过帖子说:
数据源必须实现 IEnumerable,我的确实如此。
我需要设置 CanUserSortColumns 和/或 CanUserSort(在每一列上),我做到了。
我可以通过指定排序回调函数来实现自定义排序,我做到了。

这些似乎都没有帮助。在调试器中,我的 _customerGrid_Sorting 函数永远不会被调用,并且单击列标题没有任何效果。

我在后面的 XAML 中遗漏了什么吗?我需要实现另一个接口(interface)吗?我现在感觉很迷茫,所以任何帮助表示赞赏。

XAML:

        <DataGrid Name="_customerGrid" 
AutoGenerateColumns="False"
CanUserSortColumns="True"
ColumnHeaderStyle="{StaticResource columnHeaderStyle}"
HorizontalAlignment="Left"
ItemsSource="{Binding Path=AllCustomers}"
RowDetailsVisibilityMode="VisibleWhenSelected"
RowStyle="{StaticResource DataGridRowStyle}"
SelectionUnit="FullRow"
Sorting="_customerGrid_Sorting"
VerticalAlignment="Top">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Cust ID" MinWidth="90" CanUserSort="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=CustID}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Name" MinWidth="300" CanUserSort="True" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

最佳答案

问题是这段代码

<DataGridTemplateColumn Header="Cust ID" MinWidth="90" CanUserSort="True" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=CustID}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

默认排序仅适用于 DataGridTextColumn、DataGridComboBoxColumn 等。现在这里的网格不知道如何排序,因为您在其中定义了一个 DataTemplate 和一个 Label。其他人可能在 DataTemplate 中定义了 SstackTemplate 等。所以 DataGrid 将不知道如何对其进行排序。

我会尽快向您发布示例代码,以便我们可以为此类 DataGridTemplateColumn 做些什么。但希望我给你的方向对你有帮助!!

似乎答案很简单。我使用 MVVM 使用示例 DataGrid 进行了尝试,但我的解决方案应该对您有用,我觉得

下面的 DataGridTemplateColumn 一切正常,但您缺少一个非常重要的属性,称为 排序成员路径 . Thw WPF 应该知道它应该对哪个属性进行排序。

您发布的原始内容如下所示
 <DataGridTemplateColumn Header="Name" MinWidth="300" CanUserSort="True" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

我不知道你的数据结构。但是修改后的应该是这样的
 <DataGridTemplateColumn  SortMemberPath="Name" Header="Name" MinWidth="300" CanUserSort="True" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

希望对你有帮助!!如果它对您没有帮助,请告诉我,我会尝试在某个博客中发布我的应用程序(虽然我很懒惰!)

关于WPF4 Datagrid 不对列标题进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3859712/

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