Поэтому я использую CollectionView для отображения списка сущностей, которые при нажатии переключаются между открытым и закрытым состоянием. Я сделал это, анимировав параметр HeightRequest родительского контейнера представления, который был нажат, а затем добавив все представления, которые я хотел показать в расширенном состоянии представления. Вот фрагмент кода для этого:
var animate = new Animation(d => this.HeightRequest = d,
this.Bounds.Height, this.Bounds.Height + 300, Easing.CubicOut);
animate.Commit(this, "a", length: 500);
this.layout.Children.Add(this.candidateList);
this.layout.Children.Add(this.openButton);
Это прекрасно работает, однако, если я прокручиваю список вниз, я вижу, что есть представления, которые также раскрываются, хотя я их ранее не трогал, более поэтому каждую полную страницу прокручиваю позже. Некоторые даже включают представления, которые я добавил в расширенное состояние, показывая неправильные данные. Я предположил, что это связано с механикой утилизации работы CollectionView, чтобы сэкономить на затратах на рендеринг, но должен быть какой-то способ исправить это. Вот код для соответствующих представлений:
var officesList = new CollectionView
{
ItemTemplate = new DataTemplate(typeof(OfficeListView)),
HorizontalOptions = LayoutOptions.FillAndExpand,
ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Vertical)
{
SnapPointsType = SnapPointsType.None,
ItemSpacing = 10,
},
Margin = new Thickness(20, 5),
ItemSizingStrategy = ItemSizingStrategy.MeasureAllItems,
Footer = " ",
FooterTemplate = new DataTemplate(() =>
{
return new StackLayout
{
Margin = new Thickness(20, 10),
Children = {
new LocorumLabels.MediumLabel
{
Text = "x Results | No filters applied" //TODO: Bind these to footer
}
}
};
})
};
Следующий фрагмент - это CollectionsView в расширенном «Офисе»:
this.candidateList = new CollectionView
{
ItemTemplate = new DataTemplate(typeof(CandidateDetailView)),
HorizontalOptions = LayoutOptions.FillAndExpand,
ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Vertical)
{
SnapPointsType = SnapPointsType.None,
//ItemSpacing = 10,
},
Margin = new Thickness(10, 5),
ItemSizingStrategy = ItemSizingStrategy.MeasureAllItems,
Footer = " ",
HeightRequest = 300
};
А вот видео, показывающее, что происходит: https://youtu.be/Ltg2o8BwfwY
Надеюсь, кто-нибудь может сообщить мне о решении. Большое спасибо.