2016-03-07 2 views
1

Изменились ли методы или иерархия класса Setup? Я не могу найти метод, называемый GetViewModelViewLookup для переопределения в классе установкиMvvmCross не может найти метод переопределения для отображения модели представления для просмотра

Я пытаюсь отобразить представление в другую модель представления. Я использую MvvmCross 3.5.1

Я пытаюсь следующий

protected override IDictionary<Type, Type> GetViewModelViewLookup() 

, но он говорит мне, что это не метод с именем для переопределения. Я пытаюсь следовать примеру на старом блоге MvvmCross link

Любые идеи?

Обновление * похоже, что базовый класс был MvxBaseSetup который содержал GetViewModelToViewLookup, но теперь это всего лишь MvxSetup, который не содержит его.

Итак, как мне переопределить режим просмотра, чтобы теперь просматривать сопоставление?

ответ

0

Если вы просто хотите, чтобы изменить схему именования, функция перезаписи является CreateViewToViewModelNaming

public class Setup : MvxAndroidSetup 
{ 
    public Setup(Context applicationContext) : base(applicationContext) 
    { 
    } 

    protected override IMvxNameMapping CreateViewToViewModelNaming() 
    { 
     return new ReverseViewModelNaming(); 
    } 

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

    protected override IMvxTrace CreateDebugTrace() 
    { 
     return new DebugTrace(); 
    } 
} 

class ReverseViewModelNaming : IMvxNameMapping 
{ 
    public string Map(string inputName) 
    { 
     // MyView is presented by the view model named weiVyM (how useful :P) 
     return string.Join("", inputName.Reverse()); 
    } 
} 

Если вы хотите изменить отображение , функция перезаписи является InitializeViewLookup. Если вы просто хотите добавить дополнительные сопоставления, звоните base.InitializeViewLookup().

public class Setup : MvxAndroidSetup 
{ 
    public Setup(Context applicationContext) : base(applicationContext) 
    { 
    } 

    protected override void InitializeViewLookup() 
    { 
     var registry = new Dictionary<Type, Type>() 
     { 
      { typeof(FirstViewModel), typeof(FirstActivity) }, 
      { typeof(HomeViewModel), typeof(HomeActivity) } , 
      { typeof(DetailViewModel), typeof(DetailActivity) }, 
      { typeof(UploadViewModel), typeof(UploadActivity) } 
     }; 
     var container = Cirrious.CrossCore.Mvx.Resolve<IMvxViewsContainer>(); 
     container.AddAll(registry); 
    } 

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

    protected override IMvxTrace CreateDebugTrace() 
    { 
     return new DebugTrace(); 
    } 
} 
+0

Спасибо Свен, моя проблема в том, что я хочу, чтобы одна и та же модель представления отображалась на несколько видов. Это нарушает уникальность словарного ключа. Для Xamarin iOS есть все-таки сделать это с помощью другого механизма? – rideintothesun

+0

Возможно, но вам нужен другой подход. Но чтобы найти правильный подход, вы должны больше рассказать о своих требованиях. На каких условиях вы хотите выбрать ViewA или ViewB при переходе на ViewModelAB? –

+0

У меня есть сценарий, где у меня есть сводный вид, и при нажатии на него я хочу показать подробный вид. Я хочу, чтобы оба использовали одну и ту же модель представления, поскольку данные сводного представления - это всего лишь подмножество данных представления данных. – rideintothesun

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

  • Нет связанных вопросов^_^