Xamarin формирует, как сохранить текстовое значение метки после навигации - PullRequest
0 голосов
/ 06 марта 2020

На моей главной странице я установлю текст метки (#lblStartDateTime) на отметку текущего времени, когда пользователь нажимает кнопку. Он перейдет на вторую страницу, и как только я нажму кнопку «Готово», он go вернется на главную страницу.

Когда я возвращаюсь на главную страницу со второй страницы, текст моей метки исчезает. Кто-нибудь знает, как сохранить текстовое значение метки после навигации?

Главная страница

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

       }

   }
}

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

В вашем btnDone_Clicked событии вы должны использовать Navigation.PopAsync до go для возврата на главную страницу, Navigation.PushAsync(mainpage); означает для go для новой главной страницы, а не предыдущей страницы.

  protected void btnDone_Clicked(object sender, EventArgs e)
    {

           Navigation.PopAsync();

     }    

Пожалуйста, прочитайте документ , чтобы узнать о том, как работает NavigationPage.

Обновление , вы можете передать необходимое значение SecondPage при вводе sh в 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;

    }
}

SecondPage:

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

Я загрузил пример проекта здесь , и вы можете Проверь это. Не стесняйтесь задавать мне любые вопросы, если у вас есть.

0 голосов
/ 06 марта 2020

Я бы посоветовал вам обернуть свои страницы в стек навигации, использовать NavigationPage и перейти на следующую страницу, а затем, когда вы вернетесь, он сохранит ваше состояние.

В вашем App.xaml.cs

MainPage = new NavigationPage(new YourFirstPage);

Затем введите sh страницу в навигацию и, когда вы хотите go назад, просто выполните

Navigation.PopAsync();

Goodluck

Не стесняйтесь вернуться, если у вас есть вопросы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...