Не удалось найти представление для модели представления? - PullRequest
3 голосов
/ 26 августа 2011

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

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

  • Оболочка (Conductor.Collection.AllActive)
    • Содержит несколько IPod (вы можете просматривать их как маленькие виджеты)
    • 1 Pod - это PagePod.

Этот последний является своего рода IPodConductor, поэтому комбинация экрана (модуля страницы), содержащего IPage (например, MainPage, ContactPage ..)

Вся моя конструкция может найти все мои модели представления и представления в соответствии с соглашением Caliburns, но не мою главную страницу.

Ошибка заключается в следующем: "Не удается найти представление для Gymsport.Client.Pages.Main.MainPageViewModel"

Моя структура для представления выглядит следующим образом: Gymsport.Client.Pages.Main.MainPageView

В соответствии с соглашением, caliburn должен быть в состоянии определить мой взгляд ... но это не так.

Кто-нибудь, какие-либо советы, чтобы выяснить или указатели для устранения этой ошибки.

Заранее спасибо.

1 Ответ

4 голосов
/ 26 августа 2011

В C.M есть дополнительная логика для нахождения видов, относящихся к таким словам, как Page и т. Д. (См. здесь ).

Таким образом, вы можете либо изменить свои представления, чтобы они соответствовали правилам в C.M, удалить слово 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;
};
...