简体   繁体   English

Xamarin 表单通过导航从页面传递值

[英]Xamarin forms Passing values from Pages with navigation

Initially, I did the navigation.popasync on second page back to main page and passed in the values inside the navigation.pushasync .最初,我将第二页上的navigation.popasync返回到主页面并传入了navigation.pushasync中的值。 However, now I want to go to a third page, and then do a update of time stamp lblEndDT in third page.但是,现在我想转到第三页,然后在第三页中更新时间戳lblEndDT I want to update lblEndDT on main page but btnDone in Third Page.我想更新lblEndDT主页但btnDone在第三页。 How do I pass the value from main page to third page?如何将值从主页传递到第三页?

Main Page主页

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;

        }
    }
  }
}

main page xaml主页 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>

Offline Page离线页面

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;


        }

        btnonline.Source = "onlinetool";
        btnonline.IsEnabled = true;

        Navigation.PopAsync();


    }
  }
}

Online Page在线页面

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

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

Third Page第三页

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

    }
  }
 }

Updated:更新:

Create the TimeStamp model with Online, Offline Start and End time.创建具有在线、离线开始和结束时间的时间戳模型。

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

MainPage:主页:

Xaml: Xml:

      <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"
            Grid.Row="1"
            Grid.Column="1"
            BackgroundColor="Transparent"
            Clicked="btnOffline_Clicked"
            IsEnabled="True"
            Source="monkeyicon.png" />
        <Label
            Grid.Row="2"
            Grid.Column="1"
            Margin="15,0,0,0"
            Text="Offline Tool" />
        <Label
            Grid.Row="1"
            Grid.Column="3"
            Text="Start Date Time:" />
        <Label
            Grid.Row="1"
            Grid.Column="3"
            Margin="0,40,0,0"
            Text="End Date Time:" />

        <Label
            x:Name="lblStartDT"
            Grid.Row="1"
            Grid.RowSpan="2"
            Grid.Column="4"
            Grid.ColumnSpan="2"
            Text="{Binding OfflineStartTime}" />
        <Label
            x:Name="lblEndDT"
            Grid.Row="1"
            Grid.RowSpan="2"
            Grid.Column="4"
            Grid.ColumnSpan="2"
            Margin="0,40,0,0"
            Text="{Binding OfflineEndTime}" />


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

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

        <Label
            x:Name="lblOnlineStartDT"
            Grid.Row="8"
            Grid.RowSpan="2"
            Grid.Column="4"
            Grid.ColumnSpan="2"
            Text="{Binding OnlineStartTime}" />
        <Label
            x:Name="lblOnlineEndDT"
            Grid.Row="8"
            Grid.RowSpan="2"
            Grid.Column="4"
            Grid.ColumnSpan="2"
            Margin="0,40,0,0"
            Text="{Binding OnlineEndTime}" />
        <Label
            x:Name="txtOnlineStatus"
            Grid.Row="9"
            Grid.Column="4"
            Text="NOT STARTED"
            TextColor="Red" />
    </Grid>

Code:代码:

public partial class MainPage : ContentPage
{
    public string mainpagevalue;
    int offlinecount = 0;
    int onlinecount = 0;
    public static TimeStamp timeStamp = new TimeStamp();
    public MainPage()
    {
        InitializeComponent();
    }
    private async void btnOnline_Clicked(object sender, EventArgs e)
    {
        onlinecount++;
        if (onlinecount == 1)
        {
            string currentDT = DateTime.Now.ToString();
            lblOnlineStartDT.Text = currentDT;
            timeStamp.OnlineStartTime = currentDT;
        }
        await Navigation.PushAsync(new OnlinePage());
    }
    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;
            timeStamp.OfflineStartTime = currentDT;
        }
    }
}

OfflinePage:离线页面:

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

OnlinePage:在线页面:

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

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

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM