Xaml Xamarin表单按钮计数使用导航单击
我调试了自己的代码,并意识到每当我从主页来回导航到第二页时,我的btnofflinecount都会重置。是否可以在重新加载后不重置计数器 首先,用户将单击btnOffline,这将把用户重定向到第二个页面。一旦用户点击btnDone,它将返回主页。同时,我将根据按钮单击获取开始和结束日期时间戳。现在,我的结束日期时间戳将不断更新,即使我有if语句来检查条件。(我将在btnDone事件上获得结束日期时间戳)我发现我的计数器在从第二页导航回主页时重置,而没有触发btnDone_。有人知道如何解决这个问题吗 主页Xaml Xamarin表单按钮计数使用导航单击,xaml,xamarin,xamarin.forms,Xaml,Xamarin,Xamarin.forms,我调试了自己的代码,并意识到每当我从主页来回导航到第二页时,我的btnofflinecount都会重置。是否可以在重新加载后不重置计数器 首先,用户将单击btnOffline,这将把用户重定向到第二个页面。一旦用户点击btnDone,它将返回主页。同时,我将根据按钮单击获取开始和结束日期时间戳。现在,我的结束日期时间戳将不断更新,即使我有if语句来检查条件。(我将在btnDone事件上获得结束日期时间戳)我发现我的计数器在从第二页导航回主页时重置,而没有触发btnDone_。有人知道如何解决这个
public partial class MainPage : ContentPage
{
public string mainpagevalue;
int offlinecount = 0;
public MainPage()
{
InitializeComponent();
}
private void btnOffline_Clicked(object sender, EventArgs e)
{
offlinecount++;
Navigation.PushAsync(new SecondPage(this, lblEndDT));
if (offlinecount == 1)
{
string currentDT = DateTime.Now.ToString();
lblStartDT.Text = currentDT;
}
}
public partial class SecondPage: ContentPage
{
Label lblEndDT;
MainPage mainpage;
int btnofflinedone = 0;
public SecondPage()
{
InitializeComponent();
}
public SecondPage(MainPage mPage, Label endDT)
{
InitializeComponent();
lblEndDT = endDT;
mainpage = mPage;
}
protected void btnDone_Clicked(object sender, EventArgs e)
{
btnofflinedone++;
if (btnofflinedone == 1)
{
string edt = DateTime.Now.ToString();
lblEndDT.Text = edt;
mainpage.mainpagevalue = lblEndDT.Text;
}
Navigation.PopAsync();
}
}
}
第二页
public partial class MainPage : ContentPage
{
public string mainpagevalue;
int offlinecount = 0;
public MainPage()
{
InitializeComponent();
}
private void btnOffline_Clicked(object sender, EventArgs e)
{
offlinecount++;
Navigation.PushAsync(new SecondPage(this, lblEndDT));
if (offlinecount == 1)
{
string currentDT = DateTime.Now.ToString();
lblStartDT.Text = currentDT;
}
}
public partial class SecondPage: ContentPage
{
Label lblEndDT;
MainPage mainpage;
int btnofflinedone = 0;
public SecondPage()
{
InitializeComponent();
}
public SecondPage(MainPage mPage, Label endDT)
{
InitializeComponent();
lblEndDT = endDT;
mainpage = mPage;
}
protected void btnDone_Clicked(object sender, EventArgs e)
{
btnofflinedone++;
if (btnofflinedone == 1)
{
string edt = DateTime.Now.ToString();
lblEndDT.Text = edt;
mainpage.mainpagevalue = lblEndDT.Text;
}
Navigation.PopAsync();
}
}
}
首先,作为一个建议,请使用它们,它们大大提高了代码的可读性。您的查询很容易理解,并且可以快速获得帮助 那么对于上述问题, 每次从
MainPage
的按钮导航时,您都在创建一个新的SecondPage
实例,单击下面的代码行
Navigation.PushAsync(新的第二页(this,lblendt));
您正在检查btnDone\u单击的上的SecondPage
的非静态变量。每次创建新实例时,都会重新创建非静态变量并重置为默认值。这就是为什么不能限制时间戳标签更新
对于快速修复-将静态添加到btnofflinedone
static int btnofflinedone=0;
我的建议是将静态btnofflinedone
变量从SecondPage
转换为App
类
App.Xaml.cs
公共部分类应用程序:应用程序
{
内部静态int btnofflinedone{get;set;}=0;
公共应用程序()
{
......
从第二页
中删除btnofflinedone
,并将btnofflinedone
替换为App.btnofflinedone首先,通过“我的btndonecount
每次来回导航时重置”你是说btnofflinedone
。因为我找不到任何btndonecount
。第二,为什么不在应用程序类中设置一个静态变量?第三,请删除你以前询问的问题。哦,是的,我是说btnofflinedone而不是btndonecount。你是说在应用程序类中设置一个静态值?对不起,我对xamar很陌生在中,我仍然在计算每个函数是如何工作的。我将把它作为一个答案来写。显示代码比解释更容易。好吧,你只需要在第一次导航到SecondPage
时设置mainpagevalue
。对吗?嗯,我认为在第一次单击btnofflinedone>时设置mainpagevalue
更重要
?我只想在第一次单击时获得时间戳,用于btnOffline
和btnofflinedone
。现在它适用于btnOffline
,无论在SecondPage
中按btnDone
之前来回导航多少次,这只是因为您正在创建Seco的新实例ndPage
每次导航时,由于btnofflinedone
不是静态的,因此每次在SecondPage
的btnDone>中检查时,都会检查一个新变量。这就是我建议使用静态变量的原因。我将在回答中显示它。非常感谢!这很容易理解而且非常方便!也可以使用此方法将变量从xaml调用到其他页面吗?