Не удается найти представление для модели представления?

Я пытаюсь создать композиционный интерфейс для небольшого веб-сайта.

Мое строительное дерево выглядит так:

  • 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;
};
Другие вопросы по тегам