Я пытаюсь создать расширяемый ListView, но сталкиваюсь с проблемами (не работает) в Android и iOS (работает в UWP). Пробовал много разметок, а также пытался составить список внутри списка и столкнулся с тем же результатом. Android и iOS отказываются обновлять высоту ячейки.
My Xaml
<ListView ItemsSource="{Binding groups}"
IsGroupingEnabled="true"
HasUnevenRows="False"
SelectionMode="None"
VerticalScrollBarVisibility="Never"
>
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="5" VerticalOptions="FillAndExpand">
<StackLayout.GestureRecognizers>
<TapGestureRecognizer Command="{Binding HideShowItems}" CommandParameter="{Binding .}" />
</StackLayout.GestureRecognizers>
<Label Text="{Binding GroupKey}" HorizontalOptions="Center" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" VerticalOptions="FillAndExpand"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<Grid Padding="0" HeightRequest="{Binding rowHeight}" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<BoxView Grid.Row="0" HorizontalOptions="FillAndExpand"
BackgroundColor="{Binding BtnColour}" />
</Grid>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Команда для обработки изменения
public Command HideShowItems => new Command(async (sender) =>
{
var dropDown = sender as DropDownMenu;
foreach(DropDownButton dr in dropDown)
{
if (dr.rowHeight > 0)
{
while(dr.rowHeight > 0)
{
dr.rowHeight = dr.rowHeight - 5;
await Task.Delay(5);
}
}
else
{
while(dr.rowHeight < 40)
{
dr.rowHeight = dr.rowHeight + 5;
await Task.Delay(5);
}
}
}
});
Пробовал довольно в Интернете найдено несколько примеров, и ни один из них, похоже, не делает этого.
Все еще находясь на стадии изучения, было бы полезно, если бы вы дали отзыв, когда увидите в коде что-нибудь, что можно сделать лучше.
Большое спасибо!