0

在我的应用程序的主视图模型中,我正在创建一个看起来像这样的类的实例(这已被简化)

public class MyClass
{ 
    public void MyFunction()
    {
        var root = Window.Current.Content as Frame;
        var mainPage = root.Content as Page;
    }
}

然后我调用 MyFunction(),但 root.Content 属性始终为空。

为什么是这样?

根不为空

视图的类型为 Page

谢谢

4

1 回答 1

1

您当时正试图在 MainViewModel 的构造函数中执行此操作,我认为主页未完全初始化,这就是 Content 为空的原因。如果您尝试在其他页面中执行此操作,它可以正常工作,这对我来说很奇怪,在 MainPage(loadingPage) 的 ViewModel 中它不起作用。我已经测试了这两种情况。

一种解决方法是在主页的加载事件处理程序中向 ViewModel 发送一些消息。并在该消息处理程序中调用 MyFunction。它会起作用的。

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        Messenger.Default.Send<string,MainViewModel>("MainLoaded");
    }

在 MainPage ViewModel

 public MainViewModel()
    {
        Messenger.Default.Register<string>(this, (action) =>
        {
            if (action == "MainLoaded")
            {
                MyClass cls = new MyClass();
                cls.MyFunction();

            }
        });
   }

希望这可以帮助

于 2014-05-05T09:43:20.283 回答