Phoneswapshop
Phoneswapshop

Reputation: 1397

How to open another xamarin forms page form a item-click in a list view

Hello I have a List View that I made in Xamarin forms and all I want it to do is when the user clicks a option in the List View it take them to another Xamarin forms page in my case it would be ContactInfo

heres my xaml:

<?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="WebSearch.CountySelect" Title="ReadyMo">
  <StackLayout Padding="0,20,0,0">
   <Label Text="ReadyMo" FontAttributes="Bold" HorizontalOptions="Center" />
    <ListView x:Name="listView">
      <ListView.ItemTemplate>
        <DataTemplate>
          <ViewCell>
            <Grid>
              <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0.5*" />
                <ColumnDefinition Width="0.2*" />
                <ColumnDefinition Width="0.3*" />
              </Grid.ColumnDefinitions>
              <Label Text="{Binding Name}" FontAttributes="Bold" HorizontalOptions="Center">
              </Label>
            </Grid>
          </ViewCell>
        </DataTemplate>
      </ListView.ItemTemplate>
    </ListView>
  </StackLayout>
</ContentPage>

here's my code behind:

using WebSearch;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;

namespace WebSearch
{
    public partial class CountySelect : ContentPage
    {

        public CountySelect()
        {
            InitializeComponent();


            var name = new List<County>
            {
                      new County("Adair"),
                      new County("Andrew"),
                      new County("Atchison"),
                      new County("Audrain"),
                      new County("Barry"),
                      new County("Barton"),
                      new County("Bates"),
                      new County("Benton"),
                      new County("Bollinger"),
                      new County("Boone"),
                      new County("Buchanan"),
                      new County("Butler"),
                      new County("Caldwell"),
                      new County("Callaway"),
                      new County("Camden"),
                      new County("Cape Girardeau"),
                      new County("Carroll"),
                      new County("Carter"),
                      new County("Cass"),
                      new County("Cedar"),
                      new County("Chariton"),
                      new County("Christian"),
                      new County("Clark"),
                      new County("Clay"),
                      new County("Clinton"),
                      new County("Cole"),
                      new County("Cooper"),
                      new County("Crawford"),
                      new County("Dade"),
                      new County("Dallas"),
                      new County("Daviess"),
                      new County("DeKalb"),
                      new County("Dent"),
                      new County("Douglas"),
                      new County("Dunklin"),
                      new County("Franklin"),
                      new County("Gasconade"),
                      new County("Gentry"),
                      new County("Greene"),
                      new County("Grundy"),
                      new County("Harrison"),
                      new County("Henry"),
                      new County("Hickory"),
                      new County("Holt"),
                      new County("Howard"),
                      new County("Howell"),
                      new County("Iron"),
                      new County("Jackson"),
                      new County("Jasper"),
                      new County("Jefferson"),
                      new County("Johnson"),
                      new County("Knox"),
                      new County("Laclede"),
                      new County("Lafayette"),
                      new County("Lawrence"),
                      new County("Lewis"),
                      new County("Lincoln"),
                      new County("Linn"),
                      new County("Livingston"),
                      new County("Macon"),
                      new County("Madison"),
                      new County("Maries"),
                      new County("Marion"),
                      new County("McDonald"),
                      new County("Mercer"),
                      new County("Miller"),
                      new County("Mississippi"),
                      new County("Moniteau"),
                      new County("Monroe"),
                      new County("Montgomery"),
                      new County("Morgan"),
                      new County("New Madrid"),
                      new County("Newton"),
                      new County("Nodaway"),
                      new County("Oregon"),
                      new County("Osage"),
                      new County("Ozark"),
                      new County("Pemiscot"),
                      new County("Perry"),
                      new County("Pettis"),
                      new County("Phelps"),
                      new County("Pike"),
                      new County("Platte"),
                      new County("Polk"),
                      new County("Pulaski"),
                      new County("Putnam"),
                      new County("Ralls"),
                      new County("Randolph"),
                      new County("Ray"),
                      new County("Reynolds"),
                      new County("Ripley"),
                      new County("Saline"),
                      new County("Schuyler"),
                      new County("Scotland"),
                      new County("Scott"),
                      new County("Shannon"),
                      new County("Shelby"),
                      new County("St. Charles"),
                      new County("St. Clair"),
                      new County("St. Francois"),
                      new County("St. Louis City"),
                      new County("St. Louis County"),
                      new County("Ste. Genevieve"),
                      new County("Stoddard"),
                      new County("Stone"),
                      new County("Sullivan"),
                      new County("Taney"),
                      new County("Texas"),
                      new County("Vernon"),
                      new County("Warren"),
                      new County("Washington"),
                      new County("Wayne"),
                      new County("Webster"),
                      new County("Worth"),
                      new County("Wright")
            };

            listView.ItemsSource = name;
            listView.ItemTapped += async (sender, args) =>
            {
                var item = args.Item as County;
                if (item == null) return;
                await Navigation.PushAsync(new ContactInfo(item));
                listView.SelectedItem = null;
            };

            Content = listView;


        }


    }
}

I very new to Xamarin Forms so any help would be amazing :) Thanks in advance!

Upvotes: 2

Views: 12119

Answers (2)

ClintL
ClintL

Reputation: 1453

Application Class

public class App: Application
{
    public static NavigationPage MyNavigationPage;

    public App()
    {
        MyNavigationPage = new NavigationPage();
        MainPage = MyNavigation;
        MyNavigation.PushAsync(new Page_Countries, true);
    }
}

Custom ListView With BindableProperty Item Clicked

 public class MyListView : ListView
    {


        public MyListView()
        {
            this.ItemTapped += this.OnItemTapped;

        }

        public static BindableProperty ItemClickCommandProperty = BindableProperty.Create<MyListView, ICommand>(x => x.ItemClickCommand, null);

        public ICommand ItemClickCommand {
            get { return (ICommand)this.GetValue(ItemClickCommandProperty); }
            set { this.SetValue(ItemClickCommandProperty, value); }
        }


        private void OnItemTapped(object sender, ItemTappedEventArgs e) {
            if (e.Item != null && this.ItemClickCommand != null && this.ItemClickCommand.CanExecute(e)) {
                this.ItemClickCommand.Execute(e.Item);
                this.SelectedItem = null;
            }
        }

    }

XAML

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:customcontrols="clr-namespace:MyNameSpace.CustomControls;assembly=MyNameSpace"
             x:Class="MyNameSpace.Views.Page_Countries"
             Title="Countries">

<customcontrols:MyListView
                x:Name="listOfCountries"
                VerticalOptions="Fill"
                HorizontalOptions="Fill"
                ItemsSource="{Binding PropertyCountries}"
                SelectedItem="{Binding PropertySelectedItem}"
                ItemClickCommand="{Binding CountryItemClickCommand}" <---
 <ListView.ItemTemplate>
            <DataTemplate>
              <ViewCell>
                <ViewCell.View>
                  <StackLayout
                      Orientation="Horizontal"
                      HorizontalOptions="Fill"
                      VerticalOptions="Center"
                      Padding="5,0,5,0"
                      Spacing="10">
<Label

                          HorizontalOptions="FillAndExpand"
                       LineBreakMode="TailTruncation"
                          VerticalOptions="Center"
                          Text="{Binding CountryName}" />
</StackLayout>
                </ViewCell.View>
              </ViewCell>
            </DataTemplate>
          </ListView.ItemTemplate>
        </customcontrols:MyListView>

ViewModel

class ViewModel_Countries
{
    private ObservableCollection<Models.Country> Countries;
    public ObservableCollection<Models.Country> PropertyCountries
    {
            set { SetProperty(ref Countries, value); }
            get { return Countries; }
    }

    private ICommand countryItemClickCommand;
    public ICommand CountryItemClickCommand;
    {
        get
        {
            return countryItemClickCommand ?? (countryItemClickCommand = new Command (async () => await ExecuteCountryClickCommand()));
        }
    }

private async Task ExecuteCountryClickCommand()
{
    App.MyNavigation.PushAsync(MyNewPage, true);
}

}

Upvotes: -1

Phoneswapshop
Phoneswapshop

Reputation: 1397

so I figured it out my code in my app.cs was: public class App :

Application

    {
        public App()
        {
            MainPage = new MyFirstPage();
        }
    }

when it needed to be:

public class App : Application
{
    public App()
    {
        MainPage = new NavigationPage(new MyFirstPage());
    }
}

A little more research went a long way! :)

Upvotes: 2

Related Questions