С FreshMvvn Release 2.1.0
добавлена возможность управления отображением PageModel через PageModelMapper. Теперь у нас есть возможность управлять соглашением отображения ViewModel на страницы. Он поддерживает использование Page и ViewModel, таких как Pages и PageModel. Вы делаете это с помощью IFreshPageModelMapper, как показано ниже.
public class MyPageModelMapper : IFreshPageModelMapper
{
public string GetPageTypeName(Type pageModelType)
{
var mainpagemodel = typeof(MainPageModel);
var s = Type.GetType(mainpagemodel.AssemblyQualifiedName);
var mainviewmodel = typeof(MainViewModel);
var s2 = Type.GetType(mainviewmodel.AssemblyQualifiedName);
return pageModelType.AssemblyQualifiedName
.Replace("PageModel", "Page")
.Replace("ViewModel", "Page");
}
}
Я воспроизвожу ошибку, обычно она вызвана типом od MainViewModel, возвращающим значение null. Это означает, что после замены ViewModel на Page name
(AssemblyQualifiedName of MainPage) не может получить правильный тип MainPage. Таким образом, он выдал не найденное исключение.
public static Page ResolvePageModel(Type type, object data, FreshBasePageModel pageModel)
{
var name = PageModelMapper.GetPageTypeName(s);
var pageType = Type.GetType(name);
if (pageType == null)
throw new Exception(name + " not found");
var page = (Page)FreshIOC.Container.Resolve(pageType);
BindingPageModel(data, page, pageModel);
return page;
}
Вы можете создать MainPageModel в папке PageModel, чтобы проверить его, используя приведенный ниже код в MyPageModelMapper.
var mainpagemodel = typeof(MainPageModel);
var s = Type.GetType(mainpagemodel.AssemblyQualifiedName);
var mainviewmodel = typeof(MainViewModel);
var s2 = Type.GetType(mainviewmodel.AssemblyQualifiedName);
А затем внедрите свой собственный пользовательский сопоставитель и затем установите PageModelMapper.
// To set MainPage for the Application
FreshPageModelResolver.PageModelMapper = new MyPageModelMapper();
var page = FreshPageModelResolver.ResolvePageModel<MainViewModel>();
var basicNavContainer = new FreshNavigationContainer(page);
MainPage = basicNavContainer;
Мой результат:
Я загрузил пример кода в папку GitHub FreshMvvm_ViewModelDemo
, которую вы можете загрузить для справки. https://github.com/WendyZang/Test.git