xamarin 更改标签可见属性管

0sgqnhkj  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(95)

两个内容页面Page1与Page2,Page2有一个标签。你能告诉我如何从Page1.xaml.cs更改Page2标签IsVisible属性吗?我试图更改Page1.xaml.cs静态变量,并在Page2.xaml.cs添加以下代码

protected override void OnAppearing()
        {
            base.OnAppearing();
            if(StaticVarFromPage1=="1")
            fix.IsVisible = false;
        }

还有别的办法吗?

wgx48brx

wgx48brx1#

还有别的办法吗?
我们可以使用几种方法来实现这一点。

方法一:

最好的选择是使用数据绑定并使用适当的值更新全局模型来实现这一点。
您可以参考以下代码:
1.创建全局类

public static class SharedData 
{
    public static int MyTestData ="0";

}

2.然后你可以在任何地方修改全局变量MyTestData。例如,您可以按如下方式更改第一页上的值:

private void SetGlobalButton_Clicked(object sender, EventArgs e) 
    {
        SharedData.MyTestData = "updated string";

    }

3.在第二页,您可以获得如下值:

protected override void OnAppearing() 
    {
        base.OnAppearing();

        string data = SharedData.MyTestData;

        //here you can change Label Visible attritube based on the passed data
    }

注:

但是,如果第一页和第二页使用相同的视图模型,那么只要确保根据需要为第一页和第二页使用相同的视图模型示例即可。

方法二:

另一种常见的方法是使用EventHandler
您可以在SecondPage上定义EventHandler,如下所示:

public static EventHandler<string> mEventHandler; // define a static  EventHandle

然后,您可以使用以下代码传递数据:

private void PassDataButton_Clicked(object sender, EventArgs e) 
    {
        EventHandler<string> handler = mEventHandler;
        if (handler != null)
        {
            myValue = "1";
            mEventHandler(this, myValue);

            Navigation.PopAsync();

        }
    }

在第一页中,您需要在FirstPage的构造函数中添加以下代码:

SecondPage.mEventHandler += delegate (object s, string a)
        {
            BackCall(s, a);
        };

FirstPage上的函数BackCall的代码是:

private void BackCall(object s, string a)
    {
        if (a == null)
        {
            throw new ArgumentNullException(nameof(a));
        }
        else
        {

            DisplayAlert("Alert", "The call back value is : " + a, "OK");

        //here you can change Label Visible attritube based on the passed data

        }
    }

相关问题