Не удается найти представление для модели представления?
Я пытаюсь создать композиционный интерфейс для небольшого веб-сайта.
Мое строительное дерево выглядит так:
- Shell (Conductor.Collection.AllActive)
- Содержит несколько IPod (вы можете просматривать их как маленькие виджеты)
- 1 Pod это PagePod.
Последний является своего рода IPodConductor, поэтому комбинация экрана (страницы), содержащего IPage (например, MainPage, ContactPage..)
Вся моя конструкция может найти все мои view-модели и представления в соответствии с конвенцией Caliburns, но не мою MainPage.
Ошибка выглядит следующим образом: "Не удается найти представление для Gymsport.Client.Pages.Main.MainPageViewModel"
Моя структура представления выглядит следующим образом: Gymsport.Client.Pages.Main.MainPageView
Следуя соглашению, caliburn должен быть в состоянии определить мою точку зрения... но это не так.
Кто-нибудь какие-либо советы, чтобы выяснить или указатели для устранения этой ошибки.
Заранее спасибо.
1 ответ
В CM есть дополнительная логика для поиска Views относительно таких слов, как Page и т. Д. (См. Здесь).
Таким образом, вы можете либо изменить свои представления, чтобы они соответствовали правилам в CM, удалить слово Page из ваших моделей представлений, либо вы можете принудительно настроить пользовательское расположение простого представления с помощью чего-то подобного:
ViewLocator.LocateTypeForModelType = (modelType, displayLocation, context) =>
{
var viewTypeName = modelType.FullName.Substring(
0,
modelType.FullName.IndexOf("`") < 0
? modelType.FullName.Length
: modelType.FullName.IndexOf("`")
);
viewTypeName = viewTypeName.Replace("Model", string.Empty);
if (context != null)
{
viewTypeName = Regex.Replace(viewTypeName, "View$", string.Empty);
viewTypeName += "." + context;
}
var viewType = (from assembly in AssemblySource.Instance
from type in assembly.GetExportedTypes()
where type.FullName == viewTypeName
select type).FirstOrDefault();
return viewType;
};