Search code examples
c#xamlxamarinxamarin.formsportable-class-library

Xamarin Froms Listview Not all items are shown


Hello fellow Xamarin victim,

I'm having an issue with my ListView, where not all items from the itemsource are shown. 6 of the in total 12 items are shown. Here you have my XAML Page where you can see how i use the listview (the listview is used in the middlepart):

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="Prototype_Deinceps.views.subject.DetailPage"
         xmlns:multiplechoices="clr-namespace:Prototype_Deinceps.viewincludes.QuestionTypes;assembly=Prototype_Deinceps"
         xmlns:CustomElements="clr-namespace:Prototype_Deinceps.CustomElements;assembly=Prototype_Deinceps"
         Title="Detail">
<!-- ToolBar -->
<ContentPage.ToolbarItems>
<ToolbarItem Icon="Edit.png">
  <ToolbarItem.Text>
    <OnPlatform x:TypeArguments="x:String"
                iOS="Wijzig"/>
  </ToolbarItem.Text>
</ToolbarItem>
</ContentPage.ToolbarItems>

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="6*" />
    <RowDefinition Height= "9*" />
    <RowDefinition Height="6*" />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>

  <!-- Top part of the screen that consist of basic info of the entity-->
  <StackLayout x:Name="BasicInfo" Margin="10,10,10,5" Grid.Row="0" Grid.Column="0">
    <Label Text="Basic Info" FontSize="Large"/>
    <BoxView Color="Black" WidthRequest ="100" HeightRequest="1"/>
    <Label x:Name="text1" />
    <Label x:Name="text2" />
    <Label x:Name="text3" />
    <Label x:Name="text4" />
  </StackLayout>
  <Image x:Name="EntityImage" Margin="10" Grid.Row="0" Grid.Column="1"/>
  <!-- End of Top -->

  <!-- Middle part of the screen where the questions are displayed about the entity-->
  <StackLayout x:Name="Questions" Margin="5,10,10,0" Grid.Row="1" Grid.ColumnSpan="2">
    <Label Text="Questions" FontSize="Large"/>
    <BoxView Color="Black" WidthRequest ="100" HeightRequest="1"/>
    <ScrollView>
      <ListView x:Name="QuestionListView"
                HasUnevenRows="True"
                ItemTapped="OnItemTapped">
        <ListView.ItemTemplate>
          <DataTemplate>
            <ViewCell>
              <StackLayout x:Name="ListItem" Orientation="Horizontal" >
                <multiplechoices:MultipleChoice x:Name="multi" IsVisible="{Binding isMultipleChoice} "/>
                <multiplechoices:TrueFalse  IsVisible="{Binding isTrueFalse}"/>
                <multiplechoices:Text  IsVisible="{Binding isText}"/>
                <multiplechoices:LineText  IsVisible="{Binding isLineText}"/>                  
            </StackLayout>
            </ViewCell>
          </DataTemplate>
        </ListView.ItemTemplate>
      </ListView>
    </ScrollView>
  </StackLayout>
  <!-- End of Middle -->

  <!-- Bottem part of the screen where you can put a note of the entity and save your info-->
  <StackLayout x:Name="Extra" Margin="0,10,30,5" Grid.Row="2" Grid.ColumnSpan="2">
    <Label Text="Opmerkingen" FontSize="Large"/>
    <BoxView Color="Black" WidthRequest ="100" HeightRequest="1"/>
    <CustomElements:CustomEditor PlaceHolder="Schrijf hier een opmerking..."/>
    <Button Text="Opslaan" HorizontalOptions="EndAndExpand" BackgroundColor="#AB001C" TextColor="White"/>
  </StackLayout>
  <!-- End of Bottom -->

</Grid>
</ContentPage>

Here you have te part where i define what my items are. In a writeline i can see that all 12 items are added to the itemsource. So i doubt the issue is in here, but for the sake of it here is the code behind:

 public partial class DetailPage : ContentPage
{

    public Subject sb;
    int i;
    public DetailPage(Subject subject)
    {
        InitializeComponent();

        sb = subject;
        TapGestureRecognizer tap = new TapGestureRecognizer();
        EntityImage.Source = ImageSource.FromFile("nobody_moriginal.jpg");
        text1.Text = subject.text1;
        text2.Text = subject.text2;
        text3.Text = subject.text3;
        text4.Text = subject.text4;

        tap.Tapped += OnTap;
        BasicInfo.GestureRecognizers.Add(tap);

        QuestionListView.ItemsSource = new List<Question>
        {
            new Question
            {
                Vraag = "1+1=?",
                TypeQuestion = Question.QuestionTypes.MulptipleChoice
            },
            new Question
            {
                Vraag= "Is dit waar?",
                TypeQuestion = Question.QuestionTypes.TrueFalse
            },
            new Question
            {
                Vraag= "Hoe ziet jou leven eruit?",
                TypeQuestion = Question.QuestionTypes.Text
            },
            new Question
            {
                Vraag= "Wat vind u van Tim?(Max 150 karakters)",
                TypeQuestion = Question.QuestionTypes.LineText
            },
            new Question
            {
                Vraag= "Wat vind u van Tim?(Max 150 karakters)",
                TypeQuestion = Question.QuestionTypes.LineText
            },
            new Question
            {
                Vraag= "Wat vind u van Tim?(Max 150 karakters)",
                TypeQuestion = Question.QuestionTypes.LineText
            },
            new Question
            {
                Vraag= "Wat vind u van Tim?(Max 150 karakters)",
                TypeQuestion = Question.QuestionTypes.LineText
            },
            new Question
            {
                Vraag= "Wat vind u van Tim?(Max 150 karakters)",
                TypeQuestion = Question.QuestionTypes.LineText
            },
            new Question
            {
                Vraag= "Wat vind u van Tim?(Max 150 karakters)",
                TypeQuestion = Question.QuestionTypes.LineText
            },
            new Question
            {
                Vraag= "Wat vind u van Tim?(Max 150 karakters)",
                TypeQuestion = Question.QuestionTypes.LineText
            },                new Question
            {
                Vraag= "Hoe ziet jou leven eruit?",
                TypeQuestion = Question.QuestionTypes.Text
            },                new Question
            {
                Vraag= "Hoe ziet jou leven eruit?",
                TypeQuestion = Question.QuestionTypes.Text
            }
        };
    }

    private async void OnTap(object sender, EventArgs e)
    {
        await Navigation.PushAsync(new BasicInfoPage(sb));
    }

    private void OnItemTapped(object sender, ItemTappedEventArgs e)
    {
        if (e == null) return; // has been set to null, do not 'process' tapped event
        ((ListView)sender).SelectedItem = null; // de-select the row
    }

Thank you in advance!


Solution

  • By Default ListView Have internal ScrollView, So you did not need to use ScrollView on your case.