【问题标题】:Navigate between views in Xamarin (visual studio) PCL project在 Xamarin (visual studio) PCL 项目中的视图之间导航
【发布时间】:2017-08-22 17:10:47
【问题描述】:

我找不到在按钮上实现 onClick 事件的方法,该事件将允许应用程序在登录和第二个视图之间导航。

我该怎么做?

这就是我所做的

我在我的 LoginViewModel.cs 文件中创建了一个方法,该方法应该将我重定向到第二个视图。

 class LoginViewModel
{
 private async Task SecondView_Click()
        {
            App.Current.MainPage = new NavigationPage(new SecondView());
        }
}

然后我在我的 Login.cs 中定义了一个 BindingContext

 public partial class Login : ContentPage
    {
        public Login()
        {
            InitializeComponent();
            BindingContext = new LoginViewModel();
        }
    }

然后我在我的 Login.xaml 中定义一个具有绑定命令属性的按钮

 <StackLayout
        VerticalOptions="CenterAndExpand">
        <Entry StyleId="UsernameEntry"
               Placeholder="Username"
               Text="{Binding Username}" />
        <Entry StyleId="PasswordEntry"
               Placeholder="password"
               Text="{Binding Password}" />
        <Button 
            StyleId="btn_connexion"
            Text="Connexion"
            Command="{Binding connexion}" />
        <Button 
            StyleId="btn_testSecondView"
            Text="Test 2nd View"
                Command="{Binding SecondView_Click}"></Button>
    </StackLayout>

【问题讨论】:

  • 哪个是错误?
  • 没有错误,当我点击它时它不会切换到第二个视图。我可能没有很好地实现该方法,但我不知道正确的方法是什么。
  • App.Current.MainPage = new NavigationPage(new SecondView());如果在这里设置断点,就到了?
  • 不,不是。我一直在寻找另一个看起来像命令的属性,但到目前为止还没有。

标签: c# forms button xamarin onclick


【解决方案1】:

这对我有用

第 1 页 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="TestRelativeLayout.MyPage1"
             Title="TabbedPage">
             <StackLayout>
                <Button Clicked="Handle_Clicked" Text = "Press">

        </Button>
    </StackLayout>
</ContentPage>

第 1 页 XAML.CS

using Xamarin.Forms;

namespace TestRelativeLayout
{
    public partial class MyPage1 : ContentPage
    {
        public MyPage1()
        {
            InitializeComponent();
        }

        public void Handle_Clicked(object sender, System.EventArgs e)
        {
            Application.Current.MainPage = new NavigationPage(new MyPage2());
        }
    }
}

尝试删除

private async Task

并使用

void

private async Task SecondView_Click()
        {
            App.Current.MainPage = new NavigationPage(new SecondView());
        }

【讨论】:

    【解决方案2】:

    这就是我所做的。

    我发现该提示上有一个“clicked”属性,一个带有“新事件处理程序”的智能感知下拉列表。

    <StackLayout
            VerticalOptions="CenterAndExpand">
            <Entry StyleId="UsernameEntry"
                   Placeholder="Username"
                   Text="{Binding Username}" />
            <Entry StyleId="PasswordEntry"
                   Placeholder="password"
                   Text="{Binding Password}" />
            <Button 
                StyleId="btn_connexion"
                Text="Connexion"
                Clicked="connexion" />
            <Button 
                StyleId="btn_testSecondView"
                Text="Test 2nd View"
                    Clicked="SecondView_Click"></Button>
        </StackLayout>
    

    一旦我这样做了,它就会在“Login.xaml.cs”后面的代码中创建一个方法。

    从那里我只是粘贴导航方法,它工作了

    private async Task SecondView_Click()
            {
                App.Current.MainPage = new NavigationPage(new SecondView());
            }
    

    这是一个 PCL 项目,因此很难找到正确的信息,因为您在互联网上找到的所有内容都涉及 ios/android 解决方案,而不是便携式解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多