我实际上是想在Xamarin中存档全局变量,任何页面都可以使用它。经过大量的研究,看起来像存档这样的东西的最佳方式是使用Singleton设计模式。我很难实现这一点。看看......
global.cs
using System;
namespace xamarin_forms
{
sealed class Global
{
public string test { get; set; }
private static Global _instance = null;
private Global()
{
}
static internal Global Instance()
{
if (_instance == null)
{
_instance = new Global();
}
return _instance;
}
}
}
App.xaml.cs
using Xamarin.Forms;
namespace xamarin_forms
{
public partial class App : Application
{
Global global = Global.Instance();
public App()
{
InitializeComponent();
MainPage = new PageWelcome();
global.test = "123";
}
protected override void OnStart()
{
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}
好的,到目前为止,我刚刚用一个简单的测试属性创建了我的单例类。我初始化我的应用程序时将其设置为123。
现在,在另一页,欢迎页面...我想读取我之前在初始化时设置的值...
PageWelcome.xaml.cs
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace xamarin_forms
{
public partial class PageWelcome : ContentPage
{
public PageWelcome()
{
InitializeComponent();
Global global = Global.Instance();
DisplayAlert("Alert", global.test, "OK");
}
}
}
实际上这不起作用。它给我一个空的回报。那么,如何正确使用它?谢谢!
答案 0 :(得分:2)
在App的构造函数中,首先创建一个PageWelcome
的实例。此实例读取test
单例的Global
属性,并在警报中显示其内容。此时,就我所见,没有为该属性分配任何值。
只有在PageWelcome
构造函数完成后,您才实际为单例的test
属性赋值。将您的App构造函数更改为
public App()
{
InitializeComponent();
global.test = "123";
MainPage = new PageWelcome();
}
它应该按预期工作。
答案 1 :(得分:2)
您不需要单身人士。 只需用变量static创建一个静态类,你就可以在任何页面上使用它们,就像你想要全局变量一样。
答案 2 :(得分:0)
// 1. Create static class Global with string _Test
public static class Global
{
public static void Init()
{
// your init class
}
private static string _Test { get; set; }
public static string Test
{
get => return _Test;
set => _Test = value;
}
}
// 2. Init Global in your App.cs
public App()
{
Global.Init();
}
// 3. Then use them on any page
public PageWelcome()
{
Global.Test = "123";
}