Сопоставление ViewModel и View в MvvmCross

#c# #mvvm #windows-runtime #mvvmcross

#c# #mvvm #windows-среда выполнения #mvvmcross

Вопрос:

У меня есть перекрестное приложение MVVM, и я пытаюсь выяснить, почему не отображается начальный экран (это на WinRT).

Следующий код выглядит так, как будто он загружает ViewModel MainViewModel :

 var setup = new Setup(rootFrame);
setup.Initialize();

var start = Cirrious.CrossCore.Mvx.Resolve<Cirrious.MvvmCross.ViewModels.IMvxAppStart>();
start.Start();
  

Однако Start метод MainViewModel никогда не вызывается. Причина, по-видимому, заключается в этой ошибке в выводе:

 Error seen during navigation request to MainViewModel - error KeyNotFoundException: Could not find view for MyApp.PCL.ViewModels.MainViewModel
  

Итак, вот мое предположение относительно проблемы: он ищет MyApp.PCL.ViewModels.MainView , очевидно, этого не существует. Представление находится в: MyApp.Views.MainView . Верно ли мое предположение, и если да, то как я могу убедить MvvmCross искать в правильном месте?

Редактировать:

Setup Метод вызывается из приложения MyApp.Windows WinRT.

 protected override IMvxApplication CreateApp()
{
    return new MyApp.PCL.App();
}
  

MyApp.PCL — это переносимая библиотека классов, на которую ссылаются MyApp.Windows .
MyApp.PCL содержит ViewModels и MyApp.Windows содержит представления.

Я попытался переопределить Start() :

 public class MainViewModel 
    : MvxViewModel
{

    public override void Start()
    {            
        System.Diagnostics.Debugger.Break();
        base.Start();
    }
  

но это никогда не попадает.

Комментарии:

1. Разве ваше представление не должно быть в MyApp.WinRT.Views?

2. Это все равно будет другое пространство имен?

3. По умолчанию Mvx WindowsStore ищет представления во всей сборке, в которой выполняется установка. Из вашего вопроса я понятия не имею, что происходит — не вижу, какова структура вашего проекта / решения. Вы могли бы отредактировать свой вопрос, чтобы предоставить более подробную информацию? Или, я думаю, вы могли бы переопределить github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious /… для отладки и ознакомления с тем, что происходит в вашем случае. В github.com/MvvmCross/MvvmCross/wiki /…

4. Спасибо, что так быстро ответил, Стюарт. Я обновил свой пост. Одна вещь, о которой я не упомянул (я не считаю, что это актуально), заключается в том, что приложение является универсальным приложением; однако я удалил проект Windows Phone.

Ответ №1:

Огромная проблема! здесь, но я опубликую решение; в моем представлении использовался не MvxStoreView, а стандартный StoreView.

Решение состояло в том, чтобы изменить представление следующим образом:

  ...
 xmlns:views="using:Cirrious.MvvmCross.WindowsStore.Views"
 ...
<views:MvxStorePage