2016-03-04 4 views
1

Я пытаюсь построить приложение mvvm с помощью mvvmcross. Когда я запускаю приложение, возникает исключение нулевой ссылки.Свойство ViewModel UWP10 равно null

это мой файл кода, который использует 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. что я делаю неправильно? Заранее спасибо.

ответ

2

ViewModel Свойство еще не инициализировано в конструкторе. Вот почему его значение по-прежнему null.

Вам нужно будет перенести назначение на другой метод, который вызывается позже, например. OnNavigatedTo:

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

Еще лучше, если вместо того, чтобы назначить ViewModel на свою авто реализована собственность, а есть MainViewModel геттера выполнить бросок. Тогда вам не нужно даже выполнить задание:

public MainViewModel MainViewModel => (MainViewModel)ViewModel; 

Unfortunatelly UWP не поддерживает общие базовые классы в XAML, в противном случае вы можете использовать MvxWindowsPage<MainViewModel> в качестве базовой страницы, не нуждаясь сделать бросок на всех.

Смежные вопросы