如何正确获取 MainPage?

How can correctly I get MainPage?

我第一次尝试 MainPage rootPage = new MainPage(),但是这会引发错误。

所以我尝试了官方示例版本:

[MainPage.xaml.cs]

namespace theMain
{
    public sealed partial class MainPage : Page
    {
        public static MainPage Current;

        public class MainPage()
        {
            this.InitializeComponent();
            Current = this;
        }

        public async void theFunctionIneedToAccess(P1, P2)
        {
            // Update the variable in MainPage and update the UI as well
        }
    }
}

[OtherCode.cs]

using theMain

namespace theOther
{
    public sealed partial class OtherClass
    {
        MainPage rootPage = MainPage.Current; //In debugging mode, I found that I get null here

        private void SmthHappening()
        {
            theFunctionIneedToAccess(P1, P2);
        }
    }
}

这至少不会引发错误,但我 为此总是得到 rootPage = null

我测试了统一命名空间(即 namespace theMain 两者),但这没有帮助。

我这里哪里做错了????

感谢任何帮助! :)

根据您的定义,MainPage.Current 获取当前加载的实例 MainPage

如果您的 MainPage.Current 始终为 null,请检查 MainPage 是否已加载到 Frame 中。当你试图在MainPage加载之前获取MainPage.Current时,此时Current还没有赋值,当然会显示为null。

在App.xaml.cs中的OnLaunched方法中,有这么一段代码:

if (e.PrelaunchActivated == false)
{
    if (rootFrame.Content == null)
    {
        rootFrame.Navigate(typeof(MainPage), e.Arguments);
    }
    Window.Current.Activate();
}

请确保在这段代码执行完成后调用MainPage.Current的方法。

此致。

更好的设计是更新应用程序的 state,然后让 UI react,而不是而不是试图直接驱动 UI。每当您与应用程序中的不同页面紧密耦合时,这表明某些东西 可能 错误。

在这种情况下,您可以在应用程序的某处存储注册用户列表(可能是静态 class,或者 App 对象的 属性,等等。 ),然后从该列表中读取 MainPage UI。请注意 data binding 不会直接工作,因为您可能必须处理跨不同线程的访问,但是 MainPage 有自己的帮助程序代码来侦听更改事件很容易,分派到正确的线程,然后通知应用程序。