Xaml Xamarin表单通过导航传递页面中的值

Xaml Xamarin表单通过导航传递页面中的值,xaml,xamarin,xamarin.forms,Xaml,Xamarin,Xamarin.forms,最初,我在返回主页的第二页上执行了navigation.popasync,并在navigation.pushasync中传递了值。但是,现在我想转到第三页,然后在第三页中更新时间戳lblendt。我想在主页上更新lblendt,但在第三页更新btnDone。如何将值从主页传递到第三页 主页 public partial class MainPage : ContentPage { public string mainpagevalue; int offlinecount = 0;

最初,我在返回主页的第二页上执行了
navigation.popasync
,并在
navigation.pushasync
中传递了值。但是,现在我想转到第三页,然后在第三页中更新时间戳
lblendt
。我想在主页上更新
lblendt
,但在第三页更新
btnDone
。如何将值从主页传递到第三页

主页

public partial class MainPage : ContentPage
{
    public string mainpagevalue;
    int offlinecount = 0;
    int onlinecount = 0;
    public MainPage()
    {
        InitializeComponent();

    }

    private void btnOffline_Clicked(object sender, EventArgs e)
    {
        offlinecount++;

        //Navigation.PushAsync(new SecondPage(this, lblEndDT));

        Navigation.PushAsync(new OfflinePage(this, lblEndDT, btnOnline));


        if (offlinecount == 1)
        {
            string currentDT = DateTime.Now.ToString();
            lblStartDT.Text = currentDT;

        }


    }

    private void btnOnline_Clicked(object sender, EventArgs e)
    {
        onlinecount++;


        Navigation.PushAsync(new OnlinePage());


        if (onlinecount == 1)
        {
            string currentDT = DateTime.Now.ToString();
            lblStartDT.Text = currentDT;

        }
    }
  }
}
主页xaml

<Grid>
    <Grid.RowDefinitions>

        <RowDefinition Height="30"/>
        <RowDefinition Height="70"/>
        <RowDefinition Height="30"/>
        <RowDefinition Height="20"/>
        <RowDefinition Height="70"/>
        <RowDefinition Height="30"/>
        <RowDefinition Height="30"/>

        <RowDefinition Height="10"/>
        <RowDefinition Height="70"/>
        <RowDefinition Height="30"/>
        <RowDefinition Height="20"/>
        <RowDefinition Height="70"/>
        <RowDefinition Height="30"/>
        <RowDefinition Height="30"/>

        <RowDefinition Height="10"/>
        <RowDefinition Height="70"/>
        <RowDefinition Height="30"/>
        <RowDefinition Height="30"/>

        <RowDefinition Height="10"/>
        <RowDefinition Height="70"/>
        <RowDefinition Height="30"/>
        <RowDefinition Height="20"/>
        <RowDefinition Height="70"/>
        <RowDefinition Height="30"/>
        <RowDefinition Height="30"/>

        <RowDefinition Height="10"/>
        <RowDefinition Height="70"/>
        <RowDefinition Height="30"/>
        <RowDefinition Height="30"/>

        <RowDefinition Height="10"/>
        <RowDefinition Height="50"/>
        <RowDefinition Height="20"/>

    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="30"/>
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="60" />
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="auto"/>
        <ColumnDefinition Width="70"/>
    </Grid.ColumnDefinitions>



    <!--OFFLINE TOOL-->
    <ImageButton x:Name="btnOffline" IsEnabled="True" Source="@drawable/offlinetool.png" Grid.Row="1" Grid.Column="1" BackgroundColor="Transparent" Clicked="btnOffline_Clicked"/>
    <Label Text="Offline Tool" Grid.Row="2" Grid.Column="1" Margin="15,0,0,0"/>

    <Label Text="Start Date Time:" Grid.Row="1" Grid.Column="3"/>
    <Label Text="End Date Time:" Grid.Row="1" Grid.Column="3" Margin="7,40,0,0"/>

    <Label x:Name="lblStartDT" Text="" Grid.Column="4" Grid.Row="1"/>
    <Label x:Name="lblEndDT" Text="" Grid.Column="4" Grid.Row="1" Margin="0,40,0,0"/>


    <!--ONLINE TOOL-->
    <ImageButton x:Name="btnOnline" Source="@drawable/ot.png" Grid.Row="8" Grid.Column="1" BackgroundColor="Transparent" IsEnabled="False" Clicked="btnOnline_Clicked"/>
    <Label Text="Online Tool" Grid.Row="9" Grid.Column="1" Margin="19,0,0,0"/>

    <Label Text="Start Date Time:" Grid.Row="8" Grid.Column="3" />
    <Label Text="End Date Time:" Grid.Row="8" Grid.Column="3" Margin="7,40,0,0"/>
    <Label Text="Status:" Grid.Row="9" Grid.Column="3" Margin="58,0,0,0" />

    <Label x:Name="lblOnlineStartDT" Text="" Grid.Column="4" Grid.Row="8"/>
    <Label x:Name="lblOnlineEndDT" Text="" Grid.Column="4" Grid.Row="8" Margin="0,40,0,0"/>
    <Label x:Name="txtOnlineStatus" Text="NOT STARTED" TextColor="Red" Grid.Column="4" Grid.Row="9"/>





</Grid>
在线页面

public partial class OnlinePage : ContentPage
{
    public OnlinePage()
    {
        InitializeComponent();
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        Navigation.PushAsync(new ThirdPage());
    }
  }
}
第三页

public partial class ThirdPage : ContentPage
{
    public ThirdPage()
    {
        InitializeComponent();
    }
    private void BtnDone_Clicked(object sender, EventArgs e)
    {

    }
  }
 }

更新:

 public partial class OfflinePage : ContentPage
{
    Label offlineEndDT;
    MainPage mainpage;
    ImageButton btnonline;
    public OfflinePage()
    {
        InitializeComponent();
    }
    public OfflinePage(MainPage mpage, Label endDT, ImageButton onlineimage)
    {
        InitializeComponent();
        mainpage = mpage;
        offlineEndDT = endDT;
        btnonline = onlineimage;
    }
    private void Button_Clicked(object sender, EventArgs e)
    {
        App.offlineDonecount++;

        if (App.offlineDonecount == 1)
        {
            string edt = DateTime.Now.ToString();
            offlineEndDT.Text = edt;
            mainpage.mainpagevalue = offlineEndDT.Text;
            MainPage.timeStamp.OfflineEndTime = edt;
        }         
        btnonline.IsEnabled = true;
        Navigation.PopAsync();
    }
}
  private void Button_Clicked(object sender, EventArgs e)
    {          
        Navigation.PushAsync(new ThirdPage());
    }
private async void BtnDone_Clicked(object sender, EventArgs e)
    {
        MainPage.timeStamp.OnlineEndTime = DateTime.Now.ToString();
        MainPage mainPage = new MainPage();
        mainPage.BindingContext = MainPage.timeStamp;
        await Navigation.PushAsync(mainPage);
    }
创建具有联机、脱机开始和结束时间的时间戳模型

 public class TimeStamp
{
    public string OnlineStartTime { get; set; }
    public string OnlineEndTime { get; set; }
    public string OfflineStartTime { get; set; }
    public string OfflineEndTime { get; set; }
}
主页:

 public partial class OfflinePage : ContentPage
{
    Label offlineEndDT;
    MainPage mainpage;
    ImageButton btnonline;
    public OfflinePage()
    {
        InitializeComponent();
    }
    public OfflinePage(MainPage mpage, Label endDT, ImageButton onlineimage)
    {
        InitializeComponent();
        mainpage = mpage;
        offlineEndDT = endDT;
        btnonline = onlineimage;
    }
    private void Button_Clicked(object sender, EventArgs e)
    {
        App.offlineDonecount++;

        if (App.offlineDonecount == 1)
        {
            string edt = DateTime.Now.ToString();
            offlineEndDT.Text = edt;
            mainpage.mainpagevalue = offlineEndDT.Text;
            MainPage.timeStamp.OfflineEndTime = edt;
        }         
        btnonline.IsEnabled = true;
        Navigation.PopAsync();
    }
}
  private void Button_Clicked(object sender, EventArgs e)
    {          
        Navigation.PushAsync(new ThirdPage());
    }
private async void BtnDone_Clicked(object sender, EventArgs e)
    {
        MainPage.timeStamp.OnlineEndTime = DateTime.Now.ToString();
        MainPage mainPage = new MainPage();
        mainPage.BindingContext = MainPage.timeStamp;
        await Navigation.PushAsync(mainPage);
    }
Xaml:

离线页面:

 public partial class OfflinePage : ContentPage
{
    Label offlineEndDT;
    MainPage mainpage;
    ImageButton btnonline;
    public OfflinePage()
    {
        InitializeComponent();
    }
    public OfflinePage(MainPage mpage, Label endDT, ImageButton onlineimage)
    {
        InitializeComponent();
        mainpage = mpage;
        offlineEndDT = endDT;
        btnonline = onlineimage;
    }
    private void Button_Clicked(object sender, EventArgs e)
    {
        App.offlineDonecount++;

        if (App.offlineDonecount == 1)
        {
            string edt = DateTime.Now.ToString();
            offlineEndDT.Text = edt;
            mainpage.mainpagevalue = offlineEndDT.Text;
            MainPage.timeStamp.OfflineEndTime = edt;
        }         
        btnonline.IsEnabled = true;
        Navigation.PopAsync();
    }
}
  private void Button_Clicked(object sender, EventArgs e)
    {          
        Navigation.PushAsync(new ThirdPage());
    }
private async void BtnDone_Clicked(object sender, EventArgs e)
    {
        MainPage.timeStamp.OnlineEndTime = DateTime.Now.ToString();
        MainPage mainPage = new MainPage();
        mainPage.BindingContext = MainPage.timeStamp;
        await Navigation.PushAsync(mainPage);
    }
在线页面:

 public partial class OfflinePage : ContentPage
{
    Label offlineEndDT;
    MainPage mainpage;
    ImageButton btnonline;
    public OfflinePage()
    {
        InitializeComponent();
    }
    public OfflinePage(MainPage mpage, Label endDT, ImageButton onlineimage)
    {
        InitializeComponent();
        mainpage = mpage;
        offlineEndDT = endDT;
        btnonline = onlineimage;
    }
    private void Button_Clicked(object sender, EventArgs e)
    {
        App.offlineDonecount++;

        if (App.offlineDonecount == 1)
        {
            string edt = DateTime.Now.ToString();
            offlineEndDT.Text = edt;
            mainpage.mainpagevalue = offlineEndDT.Text;
            MainPage.timeStamp.OfflineEndTime = edt;
        }         
        btnonline.IsEnabled = true;
        Navigation.PopAsync();
    }
}
  private void Button_Clicked(object sender, EventArgs e)
    {          
        Navigation.PushAsync(new ThirdPage());
    }
private async void BtnDone_Clicked(object sender, EventArgs e)
    {
        MainPage.timeStamp.OnlineEndTime = DateTime.Now.ToString();
        MainPage mainPage = new MainPage();
        mainPage.BindingContext = MainPage.timeStamp;
        await Navigation.PushAsync(mainPage);
    }
第三页:

 public partial class OfflinePage : ContentPage
{
    Label offlineEndDT;
    MainPage mainpage;
    ImageButton btnonline;
    public OfflinePage()
    {
        InitializeComponent();
    }
    public OfflinePage(MainPage mpage, Label endDT, ImageButton onlineimage)
    {
        InitializeComponent();
        mainpage = mpage;
        offlineEndDT = endDT;
        btnonline = onlineimage;
    }
    private void Button_Clicked(object sender, EventArgs e)
    {
        App.offlineDonecount++;

        if (App.offlineDonecount == 1)
        {
            string edt = DateTime.Now.ToString();
            offlineEndDT.Text = edt;
            mainpage.mainpagevalue = offlineEndDT.Text;
            MainPage.timeStamp.OfflineEndTime = edt;
        }         
        btnonline.IsEnabled = true;
        Navigation.PopAsync();
    }
}
  private void Button_Clicked(object sender, EventArgs e)
    {          
        Navigation.PushAsync(new ThirdPage());
    }
private async void BtnDone_Clicked(object sender, EventArgs e)
    {
        MainPage.timeStamp.OnlineEndTime = DateTime.Now.ToString();
        MainPage mainPage = new MainPage();
        mainPage.BindingContext = MainPage.timeStamp;
        await Navigation.PushAsync(mainPage);
    }

您可以尝试使用
Xamarin.Essentials
,方法是保存时间戳的值,然后从您想要使用的任何位置检索该值。你也可以尝试使用,但不推荐。嗨,我试图搜索Xamarin。Essentials,但我不确定如何使用它。我应该在主页中调用此函数并在第三页上使用它吗?您好,谢谢您的帮助,但是我希望有另一个显示更新按钮时间戳的标签,而不是用更新单击事件替换时间戳。我尝试编辑代码,但我不确定如何使用主页的变量从第三页绑定。我相应地更改了代码,但我意识到我不想推到新页,而是重定向到上一页。因为我将记录一组开始和结束时间戳,如果我推到一个新页面,我以前的所有记录都将消失。你能提供你的代码吗?还有你所知道的模式细节?嗨,我更新了我的代码!如果你运行我的代码,你可以看到当你按下btnOffline时,它会记录开始时间戳。单击“完成”后,它会记录结束日期和时间。所以对于OnlinePage,单击一个后,它将重定向到第三个页面。所以在第三页上,我想记录结束时间stampHello,我用我的代码进行了测试,但我意识到我不想转到新的主页,而是将popasync返回主页。我该怎么做?是否可以执行异步的导航pop?