Прокрутить список CollectionView
Эсть такая разметка:
<Border BackgroundColor="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Primary}}" StrokeThickness="0">
<Border.StrokeShape>
<RoundRectangle CornerRadius="0,0,55,55" />
</Border.StrokeShape>
<RefreshView RefreshColor="{StaticResource PrimaryDark}" IsRefreshing="{Binding IsRefreshing}" Command="{Binding RefreshCommand}" HorizontalOptions="FillAndExpand">
<ScrollView Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" VerticalScrollBarVisibility="Never" Margin="10,0,10,0">
<Grid RowDefinitions="Auto,Auto,Auto,*" RowSpacing="10">
<Grid ColumnDefinitions="*,Auto" ColumnSpacing="10" Margin="10,10,10,0">
<Border HeightRequest="40" Stroke="{StaticResource PrimaryDark}" StrokeThickness="2" Padding="10,0">
<Border.StrokeShape>
<RoundRectangle CornerRadius="10" />
</Border.StrokeShape>
<Grid ColumnDefinitions="*, Auto, Auto">
<Label Grid.Column="0" Text="Поиск..." VerticalTextAlignment="Center" FontFamily="MontserratRegular" FontSize="18" Margin="0,0,10,0"
TextColor="{StaticResource PrimaryDark}" />
<Image Grid.Column="1" Source="search_primary_dark.svg" WidthRequest="25" HeightRequest="25" Margin="5,0,10,0" />
<Label Grid.Column="2" Text="Поиск" VerticalTextAlignment="Center" FontFamily="MontserratSemiBold" FontSize="14" Margin="0,0,10,0"
TextColor="{StaticResource PrimaryDark}" />
<Grid.GestureRecognizers IsEnabled="{Binding IsEnabled}">
<TapGestureRecognizer Command="{Binding NavigateTSearchPageCommand}" />
</Grid.GestureRecognizers>
</Grid>
</Border>
<Button Grid.Column="1" Text="Добавить" TextTransform="Uppercase" WidthRequest="120" HeightRequest="40" Padding="10"
Style="{StaticResource outlineButtonStyle}" Command="{Binding AddNewItemCommand}" IsEnabled="{Binding IsEnabled}" />
</Grid>
<VerticalStackLayout Grid.Row="1" Margin="5,0,5,0" Spacing="10">
<Border BackgroundColor="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource PrimaryDark}}"
Stroke="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource PrimaryDark}}" WidthRequest="120" HeightRequest="120">
<Border.StrokeShape>
<RoundRectangle CornerRadius="50" />
</Border.StrokeShape>
<Image Source="{AppThemeBinding Light=group_primary_dark.svg, Dark=group_primary.svg}" WidthRequest="80" HeightRequest="80" />
</Border>
<Label Text="Пользователи" FontSize="20" TextTransform="Uppercase" FontAttributes="Bold" FontFamily="MontserratBold" TextColor="{StaticResource PrimaryDark}"
LineBreakMode="WordWrap" HorizontalTextAlignment="Center" />
</VerticalStackLayout>
<Grid Grid.Row="2" ColumnDefinitions="Auto,*,Auto">
<Grid ColumnDefinitions="Auto,Auto,Auto,*" Margin="10,0" HorizontalOptions="Start" VerticalOptions="Center">
<Image Source="filter_alt_primary_dark.svg" WidthRequest="25" HeightRequest="25" />
<Picker Grid.Column="1" x:Name="userRolesPicker" FontSize="18" FontFamily="MontserratSemiBold" TextColor="{StaticResource PrimaryDark}"
ItemsSource="{Binding RolesValueList}" ItemDisplayBinding="{Binding Title}"
SelectedIndex="{Binding SelectedIndexRole}" SelectedItem="{Binding SelectedRole}" IsEnabled="{Binding IsEnabled}" />
<Image Grid.Column="2" Source="keyboard_arrow_down_primary_dark.svg" WidthRequest="25" HeightRequest="25">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="ArrowDownTapped" />
</Image.GestureRecognizers>
</Image>
<Label Grid.Column="3" Text="{Binding UsersCount}" VerticalTextAlignment="Center" FontFamily="MontserratRegular" FontSize="18" Margin="5,0"
TextColor="{StaticResource PrimaryDark}" />
</Grid>
<Grid Grid.Column="2" ColumnDefinitions="Auto,Auto" Margin="10,0" HorizontalOptions="End" VerticalOptions="Center">
<Label FontSize="18" FontFamily="MontserratSemiBold" TextColor="{StaticResource PrimaryDark}">
<Label.Triggers>
<DataTrigger TargetType="Label" Binding="{Binding isOrderBy}" Value="True">
<Setter Property="Text" Value="А-я" />
</DataTrigger>
<DataTrigger TargetType="Label" Binding="{Binding isOrderBy}" Value="False">
<Setter Property="Text" Value="Я-а" />
</DataTrigger>
</Label.Triggers>
</Label>
<Image Grid.Column="1" Source="swap_vert_primary_dark.svg" WidthRequest="25" HeightRequest="25" />
<Grid.GestureRecognizers IsEnabled="{Binding IsEnabled}">
<TapGestureRecognizer Command="{Binding SortedByCommand}" />
</Grid.GestureRecognizers>
</Grid>
<Grid.Triggers>
<DataTrigger TargetType="Grid" Binding="{Binding Source={x:Reference listView}, Path=ItemsSource.Count}" Value="0">
<Setter Property="IsVisible" Value="False" />
</DataTrigger>
</Grid.Triggers>
</Grid>
<ActivityIndicator Grid.Row="3" IsRunning="{Binding IsLoading}" Style="{StaticResource primaryDarkActivityIndicatorStyle}" />
<CollectionView x:Name="listView" Grid.Row="3" ItemsSource="{Binding GroupedUsersList}" EmptyView="Нет элементов для отображения..." IsGrouped="true"
HorizontalScrollBarVisibility="Never" VerticalScrollBarVisibility="Never" SelectionMode="None" Margin="0,0,0,20">
<CollectionView.GroupHeaderTemplate>
<DataTemplate>
<Label Text="{Binding GroupName}" FontSize="20" FontAttributes="Bold" FontFamily="MontserratBold" TextColor="{StaticResource PrimaryDark}"
Margin="10">
<Label.GestureRecognizers IsEnabled="{Binding IsEnabled}">
<TapGestureRecognizer Command="{Binding Source={RelativeSource AncestorType={Type viewModel:UsersListEditorViewModel}},
Path= NavigateToAlphabeticalIndexPageCommand}" />
</Label.GestureRecognizers>
</Label>
</DataTemplate>
</CollectionView.GroupHeaderTemplate>
<CollectionView.ItemTemplate>
<DataTemplate>
<SwipeView IsEnabled="{Binding IsEnabled}">
<SwipeView.LeftItems>
<SwipeItems>
<SwipeItem IconImageSource="edit_primary_dark.svg" BackgroundColor="{StaticResource PrimaryDark}"
Command="{Binding Source={x:Reference listView}, Path=BindingContext.EditItemCommand}" CommandParameter="{Binding}" />
<SwipeItem IconImageSource="content_copy_primary_dark.svg" BackgroundColor="{StaticResource PrimaryDark}"
Command="{Binding Source={x:Reference listView}, Path=BindingContext.CopyItemCommand}" CommandParameter="{Binding}" />
</SwipeItems>
</SwipeView.LeftItems>
<SwipeView.RightItems>
<SwipeItems>
<SwipeItem IconImageSource="delete_primary_dark.svg" BackgroundColor="{StaticResource PrimaryDark}"
Command="{Binding Source={x:Reference listView}, Path=BindingContext.DeleteItemCommand}" CommandParameter="{Binding}" />
</SwipeItems>
</SwipeView.RightItems>
<control:ViewCellWithImageContent Title="{Binding FullName}" SubTitle="{Binding Email}"
BackgroundColor="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Primary}}"
TextColor="{StaticResource PrimaryDark}" IconImageSource="user_primary_dark.svg"
SupIconImageSource1="admin_panel_settings_primary_dark.svg" isVisibleSupIconIconImageSource1="{Binding IsAdmin}"
SupIconImageSource2="lock_primary_dark.svg" isVisibleSupIconIconImageSource2="{Binding Lockout}"
SubIconImageSource="mark_email_read_primary_dark.svg" isVisibleSubIconIconImageSource="{Binding EmailConfirmed}" />
</SwipeView>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</Grid>
</ScrollView>
</RefreshView>
</Border>
Использую общий scroll для прокрутки страницы, это удобно на небольших дисплеях и при горизонтальной ориентации экрана. Так же на странице присутствует сгрупированный список CollectionView. По клику на группу пользователь перенаправляется на страницу алфавитного указателя. На ней английский и русский алфавиты. Буквы которые есть в группах списка выделены и кликабельные, остальные нет. По клику на букву пользователь возвращается обратно на предыдущую страницу и после завершения навигации необходимо прокрутить CollectionView до выбранной группы. Использовал такой метод CollectionView.ScrollTo(0, ScrollToIndex, ScrollToPosition.Start, true);
Проблема в том, что ScrollView блокирует scroll CollectionView и не какой прокрутки не происходит. Без общего ScrollView всё работает, но без него при горизонтальной ориентации дисплея страница не прокручивается и список не виден, да и на небольших дисплеях неудобно.
У ScrollView есть своя прокрутка, но она не подходит. Как я понял, судя по методам, можно прокрутить либо до определённых независимых от устройства единиц (await scrollView.ScrollToAsync(0, 150, true);
), либо до объекта на разметке (await scrollView.ScrollToAsync(listView, ScrollToPosition.End, true);
), например до CollectionView.
Вопрос, как сделать прокрутку CollectionView до определённой группы?