无法找到viewmodel的视图?

时间:2011-08-25 20:07:47

标签: silverlight mvvm caliburn.micro convention

我正在尝试为小型网站制作合成用户界面。

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

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

最后一个是排序IPodConductor,所以包含IPage的屏幕(pagepod)的组合(如MainPage,ContactPage ..)

我的整个构造可以在Caliburns约定之后找到我的所有视图模型和视图,但不能找到我的MainPage。

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

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

遵循惯例,caliburn应该能够找到我的观点......但它确实没有。

任何有关解决此错误的任何提示或指示。

提前致谢。

1 个答案:

答案 0 :(得分:4)

在C.M中,还有一个额外的逻辑来查找关于像页面等单词的视图(参见here)。

因此,您可以更改视图以匹配C.M中的规则,从视图模型中删除单词页面,或者您可以使用以下内容强制执行自定义简单视图位置:

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;
};