На самом деле ...
У меня тоже была такая же проблема, когда я узнал о коллекциях представлений о создании DataContext в WPF.
Передо мной также стояла задача собрать воедино программу WPF, которая мне нужна программно для перемещения вверх и вниз по сетке данных с помощью кнопок, поскольку мне нужно было поместить ее на резистивный сенсорный экран ТОЛЬКО для строителей производства моей компании и для них нет мыши или клавиатуры.
Но этот пример работал для меня, используя метод ScrollIntoView
, как упоминалось ранее в этом посте:
private void OnMoveUp(object sender, RoutedEventArgs e)
{
ICollectionView myCollectView = CollectionViewSource.GetDefaultView(Orders);
if (myCollectView.CurrentPosition > 0)
myCollectView.MoveCurrentToPrevious();
if (myCollectView.CurrentItem != null)
theDataGrid.ScrollIntoView(myCollectView.CurrentItem);
}
private void OnMoveDown(object sender, RoutedEventArgs e)
{
ICollectionView myCollectView = CollectionViewSource.GetDefaultView(Orders);
if (myCollectView.CurrentPosition < Orders.Count)
myCollectView.MoveCurrentToNext();
if (myCollectView.CurrentItem !=null)
theDataGrid.ScrollIntoView(myCollectView.CurrentItem);
}
Где заказы List<T>
коллекция
в XAML:
<StackPanel Grid.Row="1"
Orientation="Horizontal">
<Button Click="OnMoveUp">
<Image Source="Up.jpg" />
</Button>
<Button Click="OnMoveDown">
<Image Source="Down.jpg" />
</Button>
</StackPanel>
<DataGrid Grid.Row="2"
x:Name="theDataGrid"
ItemSource="{Binding Orders}"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto" Margin="0,0,0,5">
<< code >>
</DataGrid>
Следуйте предыдущему совету и храните DataGrid отдельно, а не в панели стека. Для определения строки для DataGrid (в данном случае третьей строки) я установил Высота на 150, и полоса прокрутки работает.