在我的应用程序的主视图模型中,我正在创建一个看起来像这样的类的实例(这已被简化)
public class MyClass
{
public void MyFunction()
{
var root = Window.Current.Content as Frame;
var mainPage = root.Content as Page;
}
}
然后我调用MyFunction(),但root.Content属性始终为null。
为什么会这样?
root不为空
视图属于Page
类型由于
答案 0 :(得分:1)
您正在尝试在MainViewModel的构造函数中执行此操作,那时我认为主页面未完全初始化,这就是Content为null的原因。如果你试图在其他页面中这样做,它工作正常,这对我来说很奇怪,在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();
}
});
}
希望这有帮助