2012-08-28 29 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