如何在列表视图中单击项目打开另一个xamarin表单页面

时间:2016-05-10 14:07:01

标签: c# xaml xamarin xamarin.ios xamarin.android

你好我有一个我用Xamarin表单制作的列表视图,我想要它做的就是当用户点击列表视图中的一个选项时,它将它们带到另一个Xamarin表单页面,在我的情况下它将是ContactInfo

继承人我的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>

这是我的代码背后:

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;


        }


    }
}

我对Xamarin Forms非常新,所以任何帮助都会很棒:) 提前谢谢!

2 个答案:

答案 0 :(得分:1)

所以我在app.cs中找到了我的代码: 公共课App:

Application

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

需要的时候:

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

更多的研究还有很长的路要走! :)

答案 1 :(得分:0)

申请类

public class App: Application
{
    public static NavigationPage MyNavigationPage;

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

自定义ListView,单击BindableProperty项目

 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>

<强>视图模型

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);
}

}