C# 根据MVVM模式对gridview进行排序

C# 根据MVVM模式对gridview进行排序,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在使用MVVM模式实现我的第一个WPF应用程序 根据我下面的教程,在代码隐藏类中使用代码是一种不好的做法 现在,我想在单击列标题时实现对GridView的排序 实现这一点的通常方法是在代码隐藏类中实现一个列单击处理程序,这似乎是一种代码气味(见上文) 有没有不使用代码隐藏类的解决方案? 我能想到的一种方法是在我的viewmodel中提供一个排序的SortCommand:ICommand。但我不确定这是否是一个好的、干净的解决方案 感谢您的帮助我将使用命令方法 请记住,模型是您的数据,Vie

我正在使用
MVVM
模式实现我的第一个WPF应用程序

根据我下面的教程,在代码隐藏类中使用代码是一种不好的做法

现在,我想在单击列标题时实现对
GridView
的排序

实现这一点的通常方法是在代码隐藏类中实现一个列单击处理程序,这似乎是一种代码气味(见上文)

有没有不使用代码隐藏类的解决方案?


我能想到的一种方法是在我的viewmodel中提供一个排序的
SortCommand:ICommand
。但我不确定这是否是一个好的、干净的解决方案


感谢您的帮助

我将使用命令方法


请记住,模型是您的数据,ViewModel是一个适配器,它使数据可供视图使用,而视图是您的GUI。

在我看来,您的做法是正确的,您让视图模型控制数据收集,然后引发一个已更改的属性,让视图知道要刷新。@Paulie:我不确定,因为排序与模型没有任何关联。在我看来,它似乎只与视图相关,因此它可能被视为“仅视图”信息,并且可能被错误地放置在模型中。但我是初学者。。。谢谢你的意见,在视图后面有代码是没有错的,只要它与模型没有联系。。。如果排序可以在视图中完成,而不需要实际考虑数据类型等等-为什么不呢?我完全理解你的意思,因为我在一个小项目上只做了一个月左右的WPF,但我的理解是,你的模型并不能替代你的业务层,它是视图属性和功能的封装,但不知道视图是什么,您的排序可能只与该视图相关,但您是否设想在不需要排序的其他地方使用您的模型?我也是一个初学者,所以我可能误解了这个概念。一个有用的建议是:不要采用“代码隐藏=邪恶”的方法。MVVM的目的不是消除代码落后,而是限制代码落后,并明确区分各个部分。对列表进行排序在model&ViewModel中没有任何意义,如果您对其进行排序,那么这只是为了方便用户,而且是一种纯GUI功能。因此,将其放在代码后面不会使您杀死MVVM。事实上,在我看来,你实际上会增强它。在代码隐藏中编码的功能必须是纯GUI的,即无数据操作