2012-08-28 44 views
1

我一直在Silverlight 5中使用Caliburn.Micro的約定,並且很喜歡它。下面是一個ViewModel爲例財產:Caliburn.Micro標籤不符合約定

private String _vmStringProp = ""; 
public String VmStringProp 
{ 
    get 
    { 
     return _vmStringProp; 
    } 

    set 
    { 
     _vmStringProp = value; 
     NotifyOfPropertyChange(() => VmStringProp); 
    } 
} 

此屬性的查看約束只通過爲其命名:

<TextBox x:Name="VmStringProp" /> 

這個偉大的工程。但是,如果我將其更改爲TextBlock或Lable(下面的示例),則會引發異常。

<sdk:Label x:Name="VmStringProp" /> 

,如果你改變它綁定像正常的Silverlight,但我寧願在整個項目中保持,而不必通過約定一定的約束和其他取決於什麼類型的控制明確綁定一致的,它工作正常。有誰知道爲什麼我不能通過約定與標籤和TextBlocks綁定?

+0

你剛纔提到,拋出一個異常...你能後的異常消息和堆棧跟蹤? – nemesv

+0

我不知道該怎麼做。在我的示例應用程序(常規引導程序)Visual Studio崩潰,然後問我,如果我想調試,然後將不會'調試已經連接'。在我的實際應用程序中,我的IOC MEF引導程序(幾乎是Caliburn提供的示例)在調用GetInstance(Type serviceType,string key)時引發異常,因爲傳遞給它的Type爲null。然後它說「無法找到合同MyStringValueHere的任何實例」 – Mario

回答

6

Caliburn.Micro附帶一組WPF/SL/WP7的默認約定,但顯然不適用於所有現有控件,因此Silverlight sdk:Label也缺失。

你可以在end of this article找到內置的約定和大量的信息約定如何工作。

幸運的是,這是很容易的添加新的convetions只需添加以下代碼到你的引導程序的構造器:

public MyBootstrapper() 
{ 
    ConventionManager 
     .AddElementConvention<Label>(Label.ContentProperty, 
            "Content", 
            "DataContextChanged"); 
} 
+0

謝謝@nemesv,就是這樣。我一直專注於框架的其他部分,並沒有閱讀Caliburn的東西一段時間 - 完全忘了它。我想知道他們爲什麼不在默認情況下添加更多的約定 - 似乎有些缺失應該是默認的 – Mario