C# 在Silverlight数据网格中维护排序顺序
我有一个简单的Silverlight 5数据网格绑定到一个ObservableCollection对象:C# 在Silverlight数据网格中维护排序顺序,c#,silverlight,C#,Silverlight,我有一个简单的Silverlight 5数据网格绑定到一个ObservableCollection对象: <sdk:DataGrid x:Name="grid_test" AutoGenerateColumns="False" Grid.Row="1" Height="268" HorizontalAlignment="Left" Margin="16,186,0,0" VerticalAlignment="Top" Width="744"> <sdk:
<sdk:DataGrid x:Name="grid_test" AutoGenerateColumns="False" Grid.Row="1" Height="268" HorizontalAlignment="Left" Margin="16,186,0,0" VerticalAlignment="Top" Width="744">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Agent Name" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto" Binding="{Binding agentName}" />
<sdk:DataGridTextColumn Header="Campaign" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto" Binding="{Binding currentCampaign}" />
<sdk:DataGridTextColumn Header="Currently" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto" Binding="{Binding currentState}" />
<sdk:DataGridTextColumn Header="Time" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto" Binding="{Binding displayTime}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
。。它工作正常,数据会自动显示和更新,用户可以通过单击列标题对数据进行排序。然而,当数据发生变化时,网格不会自动使用,这意味着排序顺序没有得到严格的维护。用户需要再次单击列标题以手动重新排序数据
有什么简单的方法可以要求/告诉Silverlight在数据更改时保持数据的顺序吗?尝试设置,
Mode=TwoWay
例如:-Binding=“{Binding agentName,Mode=TwoWay}”
一个选项是使用。您可以更好地控制无效和重新应用排序和筛选。我担心这并不能解决任何问题-数据在更改时仍然会出现混乱;但是,如果我发出PagedCollectionView.Refresh(),网格将失去其垂直滚动位置-例如,用户将向下滚动到网格的底部,Refresh()将触发,然后当他们移动滚动条时,它会跳到顶部。有没有办法避免这种行为?为了回答我自己的问题,我已经禁用了DataGrids自己的滚动,并将其包装在ScrollViewer中。这似乎解决了这个特殊的问题,现在尝试“修复”排序…是的,绑定到PagedCollectionView并强制刷新()似乎也“修复”了排序顺序。谢谢
grid_test.ItemsSource = allKnownAgents;