2016-03-04 71 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>爲基數頁面,不需要做演員的。