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

本文关键字:一个 项目 视图 列表 xamarin 另一个 何打开 表单 | 更新日期: 2025-03-17 21:22:35

你好,我有一个用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的新手,所以任何帮助都会令人惊叹:)提前感谢!

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

所以我发现我的app.cs中的代码是:公共类应用程序:

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

何时需要:

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

多做一点研究有很大的帮助!:)

应用程序类

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

单击可绑定属性项的自定义列表视图

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

}