2011-08-25 41 views
3

我正在嘗試爲小型網站製作合成UI。無法找到viewmodel的視圖?

我的建築樹是這個樣子:

  • 殼牌(Conductor.Collection.AllActive)
    • 包含多個iPod的(你可以將其視爲小部件)
    • 1波德是PagePod。

這最後一個是排序IPodConductor,因此一個屏幕包含的iPage(該pagepod)(喜歡的MainPage,ContactPage ..)的組合

我的整個建築可以找到我所有的ViewModels和遵循Caliburns約定的視圖,但不是我的MainPage。

的錯誤是如下: 「無法爲Gymsport.Client.Pages.Main.MainPageViewModel找到視圖」

我的結構的觀點如下: Gymsport.Client.Pages.Main.MainPageView

按照慣例,caliburn應該能夠找到我的視圖...但它不會。

任何人有任何提示找出或指針調試此錯誤。

在此先感謝。

+0

是否有MainPageView在與Bootstrapper相同的程序集? –

回答

4

在C.M中,還有其他邏輯用於查找有關單詞(如頁面等)的視圖(請參閱here)。

所以,你可以改變你的看法,以匹配CM的規則,從您的視圖模型刪除Word頁面,或者您也可以用類似的東西,執行自定義簡單的視圖位置:

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

真棒,總是解決了我的問題。我找不到有關它的任何文檔......我想我需要更多的本能來吞噬源代碼:)非常感謝! –

+0

似乎只有將您的視圖重命名爲Gymsport.Client.Pages.Main.MainPage也應該如此。 – gius