a/listviewe/4 :clock4:help wantedp/Androidt/bug :bug:up-for-grabs
Repository metrics
- Stars
- (5,644 個のスター)
- PR merge metrics
- (30d に merged PR はありません)
説明
Description
When a Item gets hidden it doesn't free its space and It is still seleccionable. It works fine in UWP but not in Android.
Steps to Reproduce
Having this XAML
<ContentPage>
<Grid VerticalOptions="Center"
HorizontalOptions="Center">
<StackLayout Orientation="Horizontal">
<ListView WidthRequest="400" SelectionMode="Single" HorizontalOptions="Center" ItemsSource="{Binding ObservableCollectionTest}" BackgroundColor="Green">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid RowSpacing="0"
ColumnSpacing="0"
Padding="0"
Margin="0"
HeightRequest="{Binding IsVisible,Converter={StaticResource BoolToHeight},Mode=OneWay, ConverterParameter=-1}"
IsVisible="{Binding IsVisible}"
BackgroundColor="Yellow">
<Label IsVisible="{Binding IsVisible}"
Text="{Binding Text}" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button BackgroundColor="Gray" VerticalOptions="Center" Text="Hide some Items" Clicked="Button_Clicked"></Button>
</StackLayout>
</Grid>
</ContentPage>
xaml.cs : (Clicked event)
private void Button_Clicked(object sender, EventArgs e)
{
var viewModel = this.BindingContext as MainPageViewModel;
viewModel.ObservableCollectionTest[1].IsVisible = !viewModel.ObservableCollectionTest[1].IsVisible;
viewModel.ObservableCollectionTest[2].IsVisible = !viewModel.ObservableCollectionTest[2].IsVisible;
viewModel.ObservableCollectionTest[3].IsVisible = !viewModel.ObservableCollectionTest[3].IsVisible;
viewModel.ObservableCollectionTest[4].IsVisible = !viewModel.ObservableCollectionTest[4].IsVisible;
viewModel.ObservableCollectionTest[5].IsVisible = !viewModel.ObservableCollectionTest[5].IsVisible;
viewModel.ObservableCollectionTest[6].IsVisible = !viewModel.ObservableCollectionTest[6].IsVisible;
viewModel.ObservableCollectionTest[7].IsVisible = !viewModel.ObservableCollectionTest[7].IsVisible;
viewModel.ObservableCollectionTest[8].IsVisible = !viewModel.ObservableCollectionTest[8].IsVisible;
viewModel.ObservableCollectionTest[9].IsVisible = !viewModel.ObservableCollectionTest[9].IsVisible;
viewModel.ObservableCollectionTest[10].IsVisible = !viewModel.ObservableCollectionTest[10].IsVisible;
viewModel.ObservableCollectionTest[11].IsVisible = !viewModel.ObservableCollectionTest[11].IsVisible;
viewModel.ObservableCollectionTest[12].IsVisible = !viewModel.ObservableCollectionTest[12].IsVisible;
viewModel.ObservableCollectionTest[13].IsVisible = !viewModel.ObservableCollectionTest[13].IsVisible;
viewModel.ObservableCollectionTest[14].IsVisible = !viewModel.ObservableCollectionTest[14].IsVisible;
viewModel.ObservableCollectionTest[15].IsVisible = !viewModel.ObservableCollectionTest[15].IsVisible;
viewModel.ObservableCollectionTest[16].IsVisible = !viewModel.ObservableCollectionTest[16].IsVisible;
viewModel.ObservableCollectionTest[17].IsVisible = !viewModel.ObservableCollectionTest[17].IsVisible;
viewModel.ObservableCollectionTest[18].IsVisible = !viewModel.ObservableCollectionTest[18].IsVisible;
viewModel.ObservableCollectionTest[19].IsVisible = !viewModel.ObservableCollectionTest[19].IsVisible;
viewModel.ObservableCollectionTest[20].IsVisible = !viewModel.ObservableCollectionTest[20].IsVisible;
}
VM:
public static string ObservableCollectionTestPropertyName() { return nameof(ObservableCollectionTest); }
private ObservableCollection<Item> _ObservableCollectionTest = new ObservableCollection<Item>(new List<Item>()
{
new Item("test 1")
, new Item("test 2")
, new Item("test 3")
, new Item("test 4")
, new Item("test 5")
, new Item("test 6")
, new Item("test 7")
, new Item("test 8")
, new Item("test 9")
, new Item("test 10")
, new Item("test 11")
, new Item("test 12")
, new Item("test 13")
, new Item("test 14")
, new Item("test 15")
, new Item("test 16")
, new Item("test 17")
, new Item("test 18")
, new Item("test 19")
, new Item("test 20")
, new Item("test 21")
, new Item("test 22")
, new Item("test 24")
, new Item("test 25")
, new Item("test 26")
, new Item("test 27")
, new Item("test 28")
, new Item("test 29")
, new Item("test 30")
, new Item("test 31")
, new Item("test 32")
, new Item("test 33")
, new Item("test 34")
, new Item("test 35")
, new Item("test 36")
, new Item("test 37")
, new Item("test 38")
, new Item("test 39")
, new Item("test 40")
});
public ObservableCollection<Item> ObservableCollectionTest
{
get
{
return _ObservableCollectionTest;
}
set
{
_ObservableCollectionTest = value;
RaisePropertyChanged();
}
}
BoolToHeight converter:
public class BoolToHeight : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null) {
if ((bool)value) {
return System.Convert.ToDouble((string)parameter);
}
else return 0;
}
else
return 0;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((double)value == System.Convert.ToDouble((string)parameter)) return true;
else return false;
}
}
Expected Behavior
A hidden item should be not seleccionable and it should not take any space
Actual Behavior
It takes space and it is seleccionable
Basic Information
-
Version with issue: 4.0.0.250467-pre7
-
IDE: Visual Studio Community 2017 version 15.9.9
-
Platform Target Frameworks:
- Android: 8.1
Screenshots
ListView with all items visible:

ListView with some items hidden (the orange line is an item selected after hidding the items):

Source code : https://github.com/psp589/XamarinFormsIssuesReproduction