cdalto
cdalto

Reputation: 857

GridView is Not Loading Data

I'm trying to load data into a GridView after a TextBlock from another GridView on the page has been tapped/clicked. The first GridView containing the list of TextBlocks loads correctly.

Here is my XAML code for both GridViews, my Bindings seem to be correct:

   <GridView x:Name="CourseNoGridView" Margin="50,50,0,0" Grid.Row="1" VerticalAlignment="Top" Height="568" ItemsSource="{Binding Distinct_CourseNo}" SelectionMode="Single" Padding="0,0,0,10" HorizontalAlignment="Left" Width="525" SelectionChanged="CourseNoGridView_SelectionChanged">
        <GridView.ItemTemplate>
            <DataTemplate>
                <Border BorderBrush="White">
                    <TextBlock x:Name="CourseNoTextBlock" Text="{Binding CourseNo}" TextWrapping="NoWrap" FontSize="24" Width="200" Height="Auto" Padding="10" Tapped="CourseNoTextBlock_Tapped"/>
                </Border>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>
    <GridView x:Name="SectionsGridView" Margin="580,50,0,0" Grid.Row="1" VerticalAlignment="Top" Height="568" ItemsSource="{Binding Clicked_CourseNo_Sections}" SelectionMode="Single" Padding="0,0,0,10" HorizontalAlignment="Left" Width="776" SelectionChanged="CourseNoGridView_SelectionChanged">
        <GridView.ItemTemplate>
            <DataTemplate>
                <Border BorderBrush="White">
                    <TextBlock x:Name="SectionTextBlock" Text="{Binding Get_Section}" TextWrapping="NoWrap" FontSize="24" Width="200" Height="Auto" Padding="10"/>
                </Border>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>

Here is my code for handling the clicking/tapping of an item in the first GridView:

private void CourseNoGridView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    clickedSection = (Sections)e.AddedItems[0];
}

private void CourseNoTextBlock_Tapped(object sender, TappedRoutedEventArgs e)
{
    this.Clicked_CourseNo_Sections = (from s in Roster_Sections
                                      where s.CourseNo.Equals(clickedSection.CourseNo)
                                      select s).ToList();
}

Upvotes: 0

Views: 115

Answers (2)

cdalto
cdalto

Reputation: 857

It seems like adding the last line of code below fixed the problem.

 private void CourseNoTextBlock_Tapped(object sender, TappedRoutedEventArgs e)
        {
            this.Clicked_CourseNo_Sections = (from s in Roster_Sections
                                              where s.CourseNo.Equals(clickedSection.CourseNo)
                                              select s).ToList();

            SectionsGridView.ItemsSource = Clicked_CourseNo_Sections;
        }

Upvotes: 0

wdavo
wdavo

Reputation: 5110

What you want to do is use an ObservableCollection and bind your your Grid View to this. Then in your "Tapped" event handler you clear the existing items from this collection and add the new items.

Something like this:

private readonly ObservableCollection<Sections> currentSections = new ObservableCollection<Sections>();

//This is what we bind to
public ObservableCollection<Sections> CurrentSections { get { return currentSections; } }

private void CourseNoGridView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
  clickedSection = (Sections)e.AddedItems[0];
}

private void CourseNoTextBlock_Tapped(object sender, TappedRoutedEventArgs e)
{
  var courseSections = (from s in Roster_Sections
                  where s.CourseNo.Equals(clickedSection.CourseNo)
                  select s);

  CurrentSections.Clear();
  CurrentSections.AddRange(courseSections);
}

There's some documentation here:

http://msdn.microsoft.com/en-us/library/windows/apps/hh758320.aspx

Upvotes: 1

Related Questions