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?