Можно ли обернуть мой CarouselView в ListView? Я пытался сделать это с помощью функции группировки, но список всегда пуст ...
В xaml это должно выглядеть примерно так. Еще немного: у меня 3-5 фотографий на квест, у которых есть другие реквизиты, такие как Title, SubTitle и т. д. Итак, если я не могу создать такую структуру, как это можно сделать иначе?
<ListView x:Name = "questsHistoryDetailList"
HasUnevenRows = "True"
IsGroupingEnabled = "True"
SeparatorVisibility = "None"
ItemsSource = "{Binding Data}" >
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<cv:CarouselViewControl
x:Name = "carouselView"
ItemsSource = "{Binding DetailPhotoCollection}"
ShowIndicators = "true"
HorizontalOptions = "FillAndExpand"
VerticalOptions = "FillAndExpand">
<cv:CarouselViewControl.ItemTemplate>
<DataTemplate>
<StackLayout Orientation = "Vertical" HorizontalOptions = "FillAndExpand" VerticalOptions = "FillAndExpand">
<Image Source = "{Binding Photo, Converter = {StaticResource ImageSourceConverter}}"/>
</StackLayout>
</DataTemplate>
</cv:CarouselViewControl.ItemTemplate>
</cv:CarouselViewControl>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text = "{Binding Key.Title}"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
В C#
public DetailHistoryViewModel(List<Indication> indications)
{
Data = new ObservableCollection<Grouping<Indication, DetailPhoto>>();
indications.ForEach(indication => {
new photoWrapper = new ObservableCollection<DetailPhoto>(
indication.Photo.Split(',').ToList().ConvertAll(p => new DetailPhoto(p)));
Data.Add(new Grouping<Indication, DetailPhoto>(
indication,
photoWrapper
));
});
}
public class DetailPhotoWrapper
{
public List<DetailPhoto> DetailPhotoCollection { get; set; }
}
public class DetailPhoto
{
public string Photo { get; set; }
public DetailPhoto(string photo)
{
Photo = photo;
}
}
public class Grouping<K, T> : ObservableCollection<T>
{
public K Key { get; private set; }
public Grouping(K key, IEnumerable<T> items)
{
Key = key;
foreach (var item in items)
this.Items.Add(item);
}
}
Я думаю, вы столкнулись с этой проблемой: https://bugzilla.xamarin.com/show_bug.cgi?id=32290
где изображение может выходить за пределы содержащего его макета стека, CarouselView, который может выходить за пределы содержащего StackLayout.
Итак, я думаю, что происходит ваш CarouselView и изображение в нем, возможно, затемняют элементы списка.
Попробуйте удалить StackLayouts, которые обертывают ваш CarouselView и Image:
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<!-- REMOVE --><StackLayout>
<cv:CarouselViewControl
x:Name = "carouselView"
ItemsSource = "{Binding DetailPhotoCollection}"
ShowIndicators = "true"
HorizontalOptions = "FillAndExpand"
VerticalOptions = "FillAndExpand">
<cv:CarouselViewControl.ItemTemplate>
<DataTemplate>
<!-- REMOVE --><StackLayout Orientation = "Vertical" HorizontalOptions = "FillAndExpand" VerticalOptions = "FillAndExpand">
<Image Source = "{Binding Photo, Converter = {StaticResource ImageSourceConverter}}"/>
<!-- REMOVE --></StackLayout>
</DataTemplate>
</cv:CarouselViewControl.ItemTemplate>
</cv:CarouselViewControl>
<!-- REMOVE --></StackLayout>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
Они вам не понадобятся, поскольку они охватывают только один элемент.
Можно ли использовать carouselview внутри шаблона заголовка? В моем проекте мне нужно использовать, но основной стек внутри моего carouselview намного больше, чем мне нужно
не могли бы вы прислать мне свой полный образец кода? Мне нужно реализовать то же самое, но пока не повезло. Спасибо заранее.