【问题标题】:Xamarin forms how to keep label text value after navigationXamarin 表单如何在导航后保留标签文本值
【发布时间】:2020-03-06 03:51:10
【问题描述】:

在我的主页上,当用户单击按钮时,我会将标签文本 (#lblStartDateTime) 设置为当前时间戳。它将导航到第二页,一旦我单击“完成”按钮,它将返回主页。

当我从第二页导航回主页时,我的标签文本消失了。有谁知道导航后如何保留标签文本值?

主页

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

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace Test
{
   [XamlCompilation(XamlCompilationOptions.Compile)]

public partial class MainPage: ContentPage
{
    public string previouspagevalue;

    public MainPage()
    {
        InitializeComponent();

    }
    protected override void OnAppearing()
    {
        base.OnAppearing();
        lblEndDT.Text = previouspagevalue;
    }
    private void btnOffline_Clicked(object sender, EventArgs e)
    {
        Navigation.PushAsync(new SecondPage());


        string currentDT = DateTime.Now.ToString();
        lblStartDT.Text = currentDT;


       }

   }
}

第二页

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace Test
{
   [XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SecondPage: ContentPage
{

    public SecondPage()
    {
        InitializeComponent();
    }

    protected void btnDone_Clicked(object sender, EventArgs e)
    {
        MainPage mainpage = new MainPage();
        string edt = DateTime.Now.ToString();
        lblEndDateTime.Text = edt;
        mainpage.previouspagevalue = lblEndDateTime.Text;
        Navigation.PushAsync(mainpage);

       }

   }
}

【问题讨论】:

  • 你能分享一些关于这个问题的代码吗? mainPage 中有关 lblStartDateTime 的代码。
  • 嗨,我已经更新了我的代码! :)

标签: xaml xamarin xamarin.forms


【解决方案1】:

在你的btnDone_Clicked事件中,你应该使用Navigation.PopAsync回到MainPage,Navigation.PushAsync(mainpage);意味着去一个新的MainPage而不是之前的Page。

  protected void btnDone_Clicked(object sender, EventArgs e)
    {

           Navigation.PopAsync();

     }    

请阅读document 了解 NavigationPage 的工作原理。

更新,您可以在推送到SecondPage时将您需要的值传递给SecondPage

MainPage中的代码:

public partial class MainPage : ContentPage
{
    public string previouspagevalue;

    public MainPage()
    {
        InitializeComponent();

        previouspagevalue = "I'm previouspagevalue";
    }
    protected override void OnAppearing()
    {
        base.OnAppearing();

        //if you set the lblEndDT.Text = "someValue"; in the secondPage, there is no need to update it here
        lblEndDT.Text = previouspagevalue;
    }

    private void btnOffline_Clicked(object sender, EventArgs e)
    {
        //Pass the parametere you need when you go to SecondPage 
        Navigation.PushAsync(new SecondPage(this, lblEndDT));

        string currentDT = DateTime.Now.ToString();
        lblStartDT.Text = currentDT;

    }
}

第二页:

public partial class SecondPage : ContentPage
{
    Label MainPagelblEndDT;
    MainPage mainPage;
    public SecondPage()
    {
        InitializeComponent();
    }

    public SecondPage(MainPage mainP,Label lblEndDT)
    {
        InitializeComponent();

        //Get the lblEndDT reference here
        MainPagelblEndDT = lblEndDT;
        //Get the MainPage reference here
        mainPage = mainP;
    }

    private void Button_Clicked(object sender, EventArgs e)
    {           
        string edt = DateTime.Now.ToString();

        //Use it
        MainPagelblEndDT.Text = edt;      

        mainPage.previouspagevalue = MainPagelblEndDT.Text;

        Navigation.PopAsync();
    }
}

我上传了一个示例项目here,您可以查看。如果您有任何问题,请随时问我。

【讨论】:

  • 您好,感谢您的帮助。我将 PushAsync 更改为 PopAsync 但导航回主页后我的结束日期时间消失了:(
  • @Charis 等一下,我会告诉你怎么做。
  • @Charis 你想在第二页更改lblEndDateTime 的文字,然后回到MainPage,对吗?
  • 抱歉,又是一个问题。如何保持第一次点击的开始时间?这意味着如果用户在主页和第二页来回导航,则开始时间应该是第一次单击时的时间戳
  • 那么你不应该在方法 btnOffline_Clicked 中每次调用lblStartDT.Text = currentDT;。在此处添加一个布尔值以确保这是您的第一次单击,然后决定是否更新 lblStartDT 的文本。
【解决方案2】:

我建议您将页面包装在导航堆栈中,使用NavigationPage 并导航到下一页,然后当您弹出时它将保持您的状态。

在你的App.xaml.cs

MainPage = new NavigationPage(new YourFirstPage);

然后将页面推送到导航中,当您想返回时,只需执行一个

Navigation.PopAsync();

祝你好运

如有疑问,请随时回复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 2013-06-22
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 2021-06-09
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多