我一直在使用Caliburn.Micro通过Silverlight 5中的约定进行绑定并且非常喜欢它。以下是ViewModel的示例属性:
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一样绑定它可以正常工作,但我宁愿在整个项目中保持一致,而不是通过约定绑定某些绑定,而其他绑定取决于控件的类型。有谁知道为什么我不能通过约定与Labels和TextBlocks绑定?
答案 0 :(得分:7)
Caliburn.Micro为WPF / SL / WP7提供了一组默认约定,但显然不适用于所有现有控件,因此Silverlight sdk:Label
也缺失。
您可以在end of this article找到内置约定,以及有关约定如何工作的大量信息。
幸运的是,添加新的对话非常容易,只需将以下代码添加到Bootstrapper的构造函数中:
public MyBootstrapper()
{
ConventionManager
.AddElementConvention<Label>(Label.ContentProperty,
"Content",
"DataContextChanged");
}