У меня есть ListView
с некоторыми элементами, и когда я выбираю один из этих элементов, я перемещаюсь на новую страницу с горизонтальным CollectionView
, где мой SelectedItem
является элементом, который я выбрал на предыдущей странице. У меня эта часть работает.
Моя проблема в том, что если элемент, который я выбрал на странице раньше, находится слишком далеко вправо (чтобы добраться до него, нужно прокрутить), то мой SelectedItem
не будет автоматически отображаться на экране.
Изображение с видимым выбранным элементом:
Изображение, на котором выбранный элемент не виден:
Как видите, когда я выбрал элемент категории 7, он не отображается на странице.
Мой желаемый результат заключается в том, что после выбора элемента на предыдущей странице он всегда будет сразу же отображаться на следующей странице.
Кто-нибудь знает, как я могу добиться этого результата?
Мой XAML:
<CollectionView ItemsSource="{Binding CategorieList}"
ItemsLayout="HorizontalList"
x:Name="CategoryList"
VerticalOptions="Start"
Margin="0,22,0,0"
HeightRequest="32"
SelectionMode="Single"
SelectedItem="{Binding CategorieListSelectedItem, Mode=TwoWay}">
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="CommonStates">
<VisualState Name="Normal" />
<VisualState Name="Selected">
<VisualState.Setters>
<Setter Property="BackgroundColor" Value="transparent" />
<Setter TargetName="SelectedLabel" Property="Label.TextColor" Value="#004EFF"/>
<Setter TargetName="SelectedLabel" Property="Label.FontSize" Value="22"/>
<Setter TargetName="SelectedLabel" Property="Label.Margin" Value="20,-2,20,0"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Label Text="{Binding Name}"
x:Name="SelectedLabel"
Margin="20,0,20,0"
TextColor="#707070"
FontSize="20"
FontFamily="{StaticResource Helvetica}"/>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
Моя модель просмотра:
public Categories CategorieListSelectedItem
{
get
{
return categorieListSelectedItem;
}
set
{
categorieListSelectedItem = value;
OnPropertyChanged("CategorieListSelectedItem");
ProductList.Clear();
if(categorieListSelectedItem.Products != null)
{
foreach (var item in CategorieListSelectedItem.Products)
{
productList.Add(new ProductDetailsViewModel(item));
}
}
OnPropertyChanged("ProductList");
}
}