【问题标题】:How can i wait for initializecomponent to be done我怎样才能等待初始化组件完成
【发布时间】:2015-01-16 21:13:08
【问题描述】:

我正在为 Win 8 Metro 构建一个 XAML 应用程序,但遇到了“问题”。

我的 mainpage.xaml 有一个按钮,在 mainpage.xaml.cs 中我的构造函数带有 initializecomponent()。当我单击按钮时,我调用此函数方法:

private void GoToOtherPage()
{ 
    this.Frame.Navigate(typeof(MySecondPage));
}

并且工作得很好。 但是,在构造函数中我也有一个条件,如果为真,则继续,但如果为假,我也想运行 GoToOtherPage()。 然后构造函数看起来像这样

Public Mainpage()
{
    InitializeComponent();
    if(....)
    {
        //do some stuff
    }
    else
    {
        GoToOtherPage();
    }
}

由于发生这种情况时 initializecomponent() 还没有准备好,我得到错误Object reference not set to an instance of an object.,我(认为)发现是引用 this.Frame。

我应该如何以正确的方式做到这一点?在 .Navigate 之前放置“WaitForThisFormToBeReady()”之类的内容,还是我只是在完全错误的轨道上?

【问题讨论】:

    标签: c# xaml microsoft-metro


    【解决方案1】:

    我认为this.Frame 在页面导航到后变为非空,因此您可以覆盖OnNavigatedTo 来处理它。否则,您可以通过 (Frame)Window.Current.Content 获取 FrameApp 类上的属性或 NavigationService 实现 - 取决于您在设计模式化应用程序方面走了多远。

    【讨论】:

    • 我尝试了覆盖,它没有给我任何错误,它运行代码但不切换页面。我也试过 this.content=new otherpage(); whick 有效,但随后其他页面中的 Frame.GoBack() 崩溃。 :)
    • 我认为您无法在另一个导航调用中导航... :) 您可能需要使用 Dispatcher.RunAsync() 运行它以延迟它一点。
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多