0

我在使用 MVVM 模式的 wpf 应用程序中有一个 dataGrid。

如果我单击列名,dataGrid 可以对行进行排序,如果我使用 shift 键,我可以按多列排序。所以控制给了我所需要的一切。

但是,我注意到,当我对行进行排序并添加一个新元素时,新元素实际上是作为我的视图模型中我的可观察集合中的最后一个元素添加的,但是在 dataGrid 中显示在该元素具有的位置到排序标准。

所以在我的视图模型中,我尝试选择新元素。我得到了我的 observalbeCollection 的最后一个元素的索引,但是这在 DataGrid 中选择了不正确的元素,显示的最后一个元素,但这不是我的新元素。

在这篇文章中,似乎一种解决方案是使用 CollectionViewSource,但如果我没记错的话,在这种情况下,我需要在我的视图模型中实现所有代码来对元素进行排序,所以当 dataGrid 完成这项工作时需要更多代码。

这让我不禁要问,哪个真正有责任对元素进行排序?视图模型还是视图?因为如果我在我的视图模型中实现排序,视图模型需要知道存在一个在某些列名中单击的数据网格并对元素进行排序。我认为对元素进行排序是视觉上的,所以视图模型不需要做这项工作,但也许我错了。

我该如何解决这个问题?

4

1 回答 1

1

当我将数据放入 WPF 中的任何集合控件(使用 MVVM)时,我总是绑定到集合属性ItemsSource以及orSelectedItem属性SelectedItems,具体取决于SelectionMode控件的。

这使我能够找出选择了哪些项目,并选择了我想从视图模型中选择的任何(数据)项目。

如果用户设置的顺序DataGrid很重要,那么我会从视图模型中执行排序,但如果它只在用户工作时对他们很重要,那么你可以简单地忽略顺序......记住,你可以通过SelectedItem视图模型中的绑定属性访问所选项目。

于 2013-07-19T15:54:53.910 回答