Xamarin Forms CollectionView ScrollTo не работает при загрузке - PullRequest
0 голосов
/ 05 августа 2020

У меня есть форма XAML с использованием CollectionView. Я привязываю представление к коллекции объектов даты. Я установил SelectedItem в Code Behind, который работает, как ожидалось. Затем я пытаюсь использовать ScrollTo в коде позади, однако он всегда отображает первый элемент в коллекции после загрузки страницы. После загрузки страницы я подключил изображение к событию ScrollTo, и оно работает должным образом. Ниже мой код. Заранее благодарим за любую помощь!

'''
        for (int i = 0; i < 31 ; i++)
        {
            ScheduleDate date = new ScheduleDate();
            date._Date = dt.AddDays(i);
            colDates.Add(date);
        }

        cvDate.ItemsSource = colDates;
        cvDate.SelectedItem = colDates[10];
        cvDate.ScrollTo(cvDate.SelectedItem, null, ScrollToPosition.Start, true)
'''

Форма XAML

'''
            <CollectionView x:Name="cvDate" Grid.Row="0" Grid.Column="1" 
                SelectionMode="Single" >
                <CollectionView.ItemsLayout>
                    <LinearItemsLayout Orientation="Horizontal"  />
                </CollectionView.ItemsLayout>
                <CollectionView.ItemTemplate>
                    <DataTemplate>
                        <Label Text="{Binding Description}"
                                            FontAttributes="Bold"
                                            FontSize="Large"
                                            HorizontalOptions="Center"
                                            VerticalOptions="Center"
                                            />
                    </DataTemplate>
                </CollectionView.ItemTemplate>
            </CollectionView>
'''

Изменить:

Я подключил событие OnCollectionViewScrolled, и когда выполняется следующая строка кода from OnAppearing ()

cvDate.ScrollTo (cvDate.SelectedItem, null, ScrollToPosition.Start, false);

OnCollectionViewScrolled НЕ вызывается. Однако, когда я выполняю ту же строку кода из события нажатия кнопки, запускается OnCollectionViewScrolled.

1 Ответ

0 голосов
/ 06 августа 2020

Я не уверен, какие у вас Description и _Date. Я делаю простой пример для вашей справки.

  1. Запуск ScrollTo в методе переопределения OnAppearing:

    protected override void OnAppearing()
     {
        cvDate.ScrollTo(cvDate.SelectedItem, null, ScrollToPosition.Start, false);
     }
    
  2. Запуск ScrollTo нажатием кнопки метод:

    private void Button_Clicked(object sender, EventArgs e)
     {
         cvDate.ScrollTo(cvDate.SelectedItem, null, ScrollToPosition.Start, false);
     }
    

Весь код:

public partial class Page4 : ContentPage
{
    public ObservableCollection<ScheduleDate> colDates { get; set; }
    public Page4()
    {
        InitializeComponent();

        colDates = new ObservableCollection<ScheduleDate>();
        for (int i = 0; i < 31; i++)
        {
            ScheduleDate date = new ScheduleDate();
            date.Description = i.ToString();
            colDates.Add(date);
        }

        cvDate.ItemsSource = colDates;
        cvDate.SelectedItem = colDates[10];
      

    }
    protected override void OnAppearing()
    {
       cvDate.ScrollTo(cvDate.SelectedItem, null, ScrollToPosition.Start, false);

    }
    private void Button_Clicked(object sender, EventArgs e)
    {
        //cvDate.ScrollTo(cvDate.SelectedItem, null, ScrollToPosition.Start, false);
    }
}
public class ScheduleDate
{
    public string Description { get; set; }
}

Скриншот:

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...