3

我正在尝试为一个小型网站制作合成 UI。

我的建筑树看起来像这样:

  • 外壳(Conductor.Collection.AllActive)
    • 包含多个 iPod(您可以将它们视为小部件)
    • 1 个 Pod 是一个 PagePod。

最后一个是 IPodConductor,因此是包含 IPage(如 MainPage、ContactPage ..)的 Screen(pagepod)的组合

我的整个结构可以找到我所有的视图模型和遵循 Caliburns 约定的视图,但不是我的 MainPage。

错误如下:“找不到 Gymsport.Client.Pages.Main.MainPageViewModel 的视图”

我的视图结构如下: Gymsport.Client.Pages.Main.MainPageView

按照惯例,caliburn 应该能够找到我的视野……但事实并非如此。

任何人都可以找出任何提示或调试此错误的指针。

提前致谢。

4

1 回答 1

4

在 CM 中,有额外的逻辑用于查找与 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;
};
于 2011-08-26T07:24:30.370 回答