UWP10 ViewModel属性为null

时间:2016-03-04 17:19:12

标签: c# win-universal-app mvvmcross

我正在尝试使用mvvmcross构建一个mvvm应用程序。当我启动应用程序时,会发生空引用异常。

这是我的代码隐藏文件,它使用MvvmCross.WindowsUWP.Views。

 public sealed partial class MainView : MvxWindowsPage
{
    public MainView()
    {
        this.InitializeComponent();
        MainViewModel = (MainViewModel)ViewModel;            
    }

    public MainViewModel MainViewModel { get; set; }

    public PlayersViewModel PlayersViewModel { get; set; } = Mvx.IocConstruct<PlayersViewModel>();
}

这是我的app.cs文件。

public class App : MvxApplication
{
    public override void Initialize()
    {
        RegisterAppStart<MainViewModel>();
    }
}

当我在MainViewModel =(MainViewModel)ViewModel设置断点时;命中断点,我可以看到ViewModel属性为null。我做错了什么?提前谢谢。

1 个答案:

答案 0 :(得分:2)

ViewModel属性尚未在构造函数中初始化。这就是为什么它的价值仍为null

您需要将作业移动到稍后调用的其他方法,例如OnNavigatedTo

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    MainViewModel = (MainViewModel)ViewModel;
}

更好的是,不是将ViewModel分配给您自己的自动实现的属性,而是让MainViewModel getter执行强制转换。那你甚至不需要做任务:

public MainViewModel MainViewModel => (MainViewModel)ViewModel;

不幸的是,UWP并不支持XAML中的通用基类,否则你可以使用MvxWindowsPage<MainViewModel>作为基页,而不需要进行转换。