如何绑定到DataGrids Items属性

时间:2018-05-24 09:04:48

标签: wpf mvvm

在DataGrid中对Column进行排序时,ItemsSource属性实际上没有排序,但Items属性会这样做。 ItemsSource绑定到我的视图模型中的ObservableCollection,但Items属性只有一个getter,因此它不允许我像使用ItemsSource那样绑定它。

我有一个ResultsView,然后是一个ItemView; ResultsView包含带有绑定ItemsSource的DataGrid,ItemView显示DataGrid中当前选定的项目。我在ItemView中有一个下一个和上一个按钮,它允许用户遍历DataGrid(在集合中给出它们的下一个/上一个项目),但我的问题是当它在列上排序时,下一个或前一个项目不是它们在DataGrid中的位置。

e.g。

未分类的项目:[0],[1],[2],[3],[4],[5] - 下一个和上一个为您提供DataGrid中显示的下一个/上一个项目

排序项目:[3],[0],[4],[5],[1],[2] - 如果用户在ItemView中打开[3]并点击下一步,则[4]将打开[0],因为我只是给他们ItemsSource中的下一个项目。

Items属性保存已排序的ItemsSource,所以如果我能以某种方式绑定到这个,那么我可以给它们那个集合中的下一个/上一个项目。

<customControls:CustomDataGrid x:Name="GridControl"
                                   DataContext="{Binding CustomDataGridViewModel}"
                                   Items="{Binding SortedResults, Mode=OneWayToSource}"
                                   ItemsSource="{Binding DataContext.DataGridResults, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                                   SelectedItem="{Binding DataContext.SelectedReferral, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                                   Style="{DynamicResource MetroDataGrid}"
                                   AutoGenerateColumns="False"
                                   IsReadOnly="False"
                                   BeginningEdit="GridControl_OnBeginningEdit"
                                   CanUserAddRows="False"
                                   ColumnInfoCollection="{Binding ColumnInfoCollection}"
                                   Grid.Row="1"
                                   BorderBrush="{DynamicResource AccentColorBrush3}"
                                   BorderThickness="2,0,2,2">

&#34;该物业&#34;物品&#34;没有可访问的getter&#34;

1 个答案:

答案 0 :(得分:0)

你不能一起使用Items和ItemsSource绑定......!

您必须使用CollectionVew并管理其上的排序,然后管理分页.... datagrid无法在分页数据源上正确管理排序

再见