gpt4 book ai didi

c# - 使用 MVVM 在 WPF DataGrid 中自定义排序

转载 作者:太空狗 更新时间:2023-10-30 00:32:33 25 4
gpt4 key购买 nike

我有一个绑定(bind)到我的 ViewModel 集合的数据网格。其中一列的值非常适合业务需求。在此列中,它可以包含字母数字字符。

例如,我可以有列值 A1、A20、AA、AA12、AAA。现在我想对这些值进行自定义排序,比如我希望字母最多的东西应该排在第一位,或者等等。 DataGrid 有一个默认排序,但只进行正常排序。

我的问题是您将如何通过 MVVM 实现它?我们可以通过在代码隐藏中订阅一个事件并重新安排整个集合来解决这个问题。但这不是我想要的,我正在寻找有关如何处理此问题的建议或解决方案。

我找到了这个链接 Sorting on datagrid column with binded data and converter这是为 DataGrid 附加一个属性,但我想要做的是附加一个属性,以便在每次用户单击此列时进行更新。是否可以在 DataGrid 列中附加属性?

可能重复:Sorting on datagrid column with binded data and converter但这不是使用 MVVM。

最佳答案

有几种策略,但最直接的方法是像这样设置一个 DataGrid...

<DataGrid ItemsSource="{Binding DriveList}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" SortMemberPath="DriveType"/>
</DataGrid.Columns>
</DataGrid>

此示例显示网格绑定(bind)到主机上的驱动器列表。第一列显示信息绑定(bind)到属性“名称”。 但是 当您单击列标题时,它会根据未显示的属性“DriveType”进行排序。奇怪的例子,但它工作正常。

因此,在您的应用中,您可以修改集合项以包含未显示的属性,并根据需要用值填充它。在您问题的示例中,您可能会使用类似...

MySortString = MyName.ToString().Length;

这将导致排序执行您要查找的操作,即“MyName”的最长值将首先出现,然后是较短的值。每次更改排序方法或重新加载数据源时,都必须重新填充“MySortString”属性。

此策略符合 MVVM,因为您在 VM 中所做的一切都是在填充一个额外的属性。另外,您可以立即使用 Nunit 或其他工具对其进行单元测试。

关于c# - 使用 MVVM 在 WPF DataGrid 中自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17206421/

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