Xaml Xamarin表单按钮计数使用导航单击

Xaml Xamarin表单按钮计数使用导航单击,xaml,xamarin,xamarin.forms,Xaml,Xamarin,Xamarin.forms,我调试了自己的代码,并意识到每当我从主页来回导航到第二页时,我的btnofflinecount都会重置。是否可以在重新加载后不重置计数器 首先,用户将单击btnOffline,这将把用户重定向到第二个页面。一旦用户点击btnDone,它将返回主页。同时,我将根据按钮单击获取开始和结束日期时间戳。现在,我的结束日期时间戳将不断更新,即使我有if语句来检查条件。(我将在btnDone事件上获得结束日期时间戳)我发现我的计数器在从第二页导航回主页时重置,而没有触发btnDone_。有人知道如何解决这个

我调试了自己的代码,并意识到每当我从主页来回导航到第二页时,我的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调用到其他页面吗?