【问题标题】:Xamarin forms button count click with navigationXamarin 表单按钮计数单击导航
【发布时间】:2020-03-17 18:18:22
【问题描述】:

我调试了自己的代码,发现每次从主页来回导航到第二页时我的 btnofflinecount 都会重置。重新加载后是否可以不重置计数器?

首先,用户将单击 btnOffline,这会将用户重定向到第二页。一旦用户单击 btnDone,它将返回主页面。同时,我将根据按钮单击获取开始和结束日期时间戳。现在,即使我有 if 语句来检查条件,我的结束日期时间戳也会不断更新。 (我将获得 btnDone 事件的结束日期时间戳)当我从第二页导航回主页时发现我的计数器重置,而尚未触发 btnDone_Clicked。有谁知道如何解决这个问题?

主页

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


       }

     }
   } 

【问题讨论】:

  • 首先,“我的btndonecount 每次来回导航时都会重置”是指btnofflinedone。因为我没有找到任何btndonecount。其次,为什么不在 App 类中设置一个静态变量?第三,请删除您之前提出相同问题的查询。
  • 哦,是的,我的意思是 btnofflinedone 而不是 btndonecount。你是什​​么意思在应用程序类中设置一个静态值?抱歉,我对 xamarin 很陌生,所以我仍在弄清楚每个功能是如何工作的。
  • 我会把它写成答案。显示代码比解释容易。 AFAIK,您只需要在第一次导航时将mainpagevalue 设置为SecondPage。我说的对吗?
  • 嗯,我认为更多的是在第一次点击时设置mainpagevaluebtnofflinedone?我只想在第一次点击时获得 btnOfflinebtnofflinedone 的时间戳。现在它适用于btnOffline,无论我在SecondPage 中按btnDone 之前来回导航多少次
  • 这只是因为您每次导航时都在创建 SecondPage 的新实例,并且由于 btnofflinedone 不是静态的,因此您每次检查 btnDone_Clicked 时都会检查新变量SecondPage。这就是我建议使用static 变量的原因。我会在答案中显示,请稍候

标签: xaml xamarin xamarin.forms


【解决方案1】:

首先作为一个建议,请使用MS doc's naming guidelines,它们极大地提高了代码的可读性。您的查询很容易理解,您可以快速获得帮助。

现在,对于上述问题,

每次从MainPage 的按钮导航到以下代码行时,您都会创建一个SecondPage 的新实例。

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

您正在检查btnDone_Clicked 上的SecondPage 的非静态变量。每次创建新实例时,都会重新创建非静态变量并将其重置为默认值。这就是您无法限制时间戳标签更新的原因。

为了快速修复 - 将静态添加到 btnofflinedone

static int btnofflinedone = 0;

我的建议是将静态 btnofflinedone 变量从 SecondPage 转移到 App

App.Xaml.cs

public partial class App : Application
{
    internal static int btnofflinedone { get; set; } = 0;

    public App()
    {
    ......

SecondPage 中删除btnofflinedone 并将btnofflinedone 替换为App.btnofflinedone

【讨论】:

  • 非常感谢!这很容易理解,也很方便!是否也可以使用此方法从 xaml 调用变量到其他页面?
猜你喜欢
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2017-08-23
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
相关资源
最近更新 更多