C# 使用MVVM在WPF数据网格中进行自定义排序
我有一个绑定到ViewModel集合的datagrid。其中一列具有非常特定于业务需求的值。在此列上,它可以包含字母数字字符 例如,我可以有列值A1、A20、AA、AA12、AAA。现在,我想对这些值进行自定义排序,比如说,我想让字母最多的任何东西都应该排在前面,或者排在前面。DataGrid有一个默认排序,但只执行正常排序 我的问题是,您将如何通过MVVM实现这一点?我们可以通过在code behind中订阅一个事件并重新安排整个集合来解决这个问题。然而,这不是我想要的,我正在寻找关于如何实现这一点的建议或解决方案 我发现这个链接正在为DataGrid附加一个属性,但我想做的是附加一个属性,该属性将在用户每次单击此列时更新。是否可以在DataGrid列中附加属性C# 使用MVVM在WPF数据网格中进行自定义排序,c#,wpf,sorting,mvvm,datagrid,C#,Wpf,Sorting,Mvvm,Datagrid,我有一个绑定到ViewModel集合的datagrid。其中一列具有非常特定于业务需求的值。在此列上,它可以包含字母数字字符 例如,我可以有列值A1、A20、AA、AA12、AAA。现在,我想对这些值进行自定义排序,比如说,我想让字母最多的任何东西都应该排在前面,或者排在前面。DataGrid有一个默认排序,但只执行正常排序 我的问题是,您将如何通过MVVM实现这一点?我们可以通过在code behind中订阅一个事件并重新安排整个集合来解决这个问题。然而,这不是我想要的,我正在寻找关于如何实现
可能重复:但这不是使用MVVM 有几种策略,但最直接的方法是建立一个类似这样的数据网格
<DataGrid ItemsSource="{Binding DriveList}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" SortMemberPath="DriveType"/>
</DataGrid.Columns>
</DataGrid>
这将导致排序执行您正在查找的操作,即“MyName”的最长值将位于第一位,之后是较短的值。每次更改排序方法或重新加载数据源时,都必须重新填充“MySortString”属性
此策略与MVVM兼容,因为您在VM中所做的一切都是填充一个附加属性。此外,您还可以使用Nunit或其他任何工具立即对其进行单元测试。我创建了一个附加行为,它以一种友好的MVVM方式实现了这一点:
希望这能解决您的问题。问题,您的datagrid是否自动生成列?您正在使用DataGridText列吗?简单的回答是将列的排序路径设置为未显示的属性,它将根据您的自定义要求进行排序。但是你没有提供足够的信息告诉我谢谢你的提问,我的专栏不是自动生成的,是的,我使用的是DataGridText专栏。嗨,Garry,很抱歉我没有得到这个。如果你重新发布你之前添加的解决方案,我将能够将其标记为答案。您好,我已取消删除它。希望它能解决你的问题。如果不显示,则呼喊。只是添加,显示或未显示的属性都将起作用。事后考虑。使用模板列时,需要在列上声明,而不是在模板本身中声明。
MySortString = MyName.ToString().Length;