есть ли способ получить первый видимый элемент, который отображается пользователю?
В WinForms DatagridView
у нас было FirstDisplayedScrollingRowIndex
.Есть ли эквивалент для варианта WPF?
Я использую CollectionView в моем ViewModel, который связан с DataGrid в XAML.
Просто чтобы прояснить: Я не хочу получить индекс SelectedRow, это я уже могу сделать ...
Пример
У меня естьполучил 20 элементов в моей коллекции ObservableCollection, и моя таблица данных может показывать только 13 из-за ограничений по размеру.Item2 был ранее выбран пользователем, и после этого пользователь немного прокрутил его, поэтому элементы 5-17 видны.Как получить индекс item5?
XAML
<Style x:Key="DatagridStyle" TargetType="DataGrid">
<Setter Property="AutoGenerateColumns" Value="False"/>
<Setter Property="Background" Value="{StaticResource ColorDatagridBackground}"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="CanUserAddRows" Value="False"/>
<Setter Property="CanUserDeleteRows" Value="False"/>
<Setter Property="CanUserResizeColumns" Value="False"/>
<Setter Property="CanUserReorderColumns" Value="True"/>
<Setter Property="CanUserSortColumns" Value="True"/>
<Setter Property="ColumnHeaderHeight" Value="25"/>
<Setter Property="Margin" Value="0,5,0,5"/>
<Setter Property="ItemsSource" Value="{Binding ItemCollection}"/>
</Style>
<DataGrid DockPanel.Dock="Top"
Style="{StaticResource DatagridStyle}"
util:DataGridColumnsBehavior.BindableColumns="{Binding DatagridColumns, UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem="True"
EnableRowVirtualization="True">
<i:Interaction.Behaviors>
<util:DataGridScrollBehaviour />
</i:Interaction.Behaviors>
</DataGrid>
ViewModel
private ObservableCollection<DataGridColumn> _datagridColumns;
private CollectionView _itemCollection;
private CollectionViewSource _itemCollectionSource;
public ObservableCollection<DataGridColumn> DatagridColumns
{
get => _datagridColumns;
set
{
_datagridColumns = value;
RaisePropertyChanged();
}
}
public CollectionView ItemCollection
{
get => _itemCollection;
set
{
_itemCollection = value;
RaisePropertyChanged();
}
}
public CollectionViewSource ItemCollectionSource
{
get => _itemCollectionSource;
set
{
_itemCollectionSource = value;
RaisePropertyChanged();
}
}
_datagridColumns = MainViewModel.GetColumns(MainViewModel.AppMode.Match);
_itemCollectionSource = new CollectionViewSource();
ItemCollectionSource.Source = _vml.Main.ItemList;
_itemCollection = (CollectionView)ItemCollectionSource.View;
Желаемый результат: , если моя область просмотра ...
- в top , и я добавляю элемент сверху (из-за текущей сортировки), я хочу, чтобы моя область просмотра былаоставайтесь наверху, чтобы я мог видеть свой новый элемент
- в внизу и добавлял элемент внизу (из-за текущей сортировки), я хочу, чтобы моя область просмотра переместилась в«новое» дно, поэтому я могу видеть мой новый элемент
- где-то посередине, я хочу продолжать смотреть на те же элементы X
Я могу получить доступ к SortOrder через мой CollectionView, но для того, чтобычтобы определить, где моя область обзора должна быть перемещена, мне нужно знать, где находится моя область обзора в данный момент (верхняя, средняя, нижняя)