2016-03-04 75 views
1

我正尝试使用mvvmcross构建mvvm应用程序。当我启动应用程序时,会发生空引用异常。UWP10 ViewModel属性为空

这是我的代码隐藏文件,它使用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属性为空。我做错了什么?提前致谢。

回答

2

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

您需要将分配移至稍后调用的其他方法,例如, OnNavigatedTo

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

更妙的是,而不是分配给ViewModel自己自动实现的属性,而有MainViewModel吸气执行转换。然后,你甚至不需要做任务:

public MainViewModel MainViewModel => (MainViewModel)ViewModel; 

可惜的是UWP不支持XAML通用基础类,否则,你可以使用MvxWindowsPage<MainViewModel>为基数页面,不需要做演员的。