Mar*_*rio 2 .net c# silverlight mvvm caliburn.micro
我一直在使用Caliburn.Micro通过Silverlight 5中的约定进行绑定并且非常喜欢它.以下是ViewModel的示例属性:
private String _vmStringProp = "";
public String VmStringProp
{
get
{
return _vmStringProp;
}
set
{
_vmStringProp = value;
NotifyOfPropertyChange(() => VmStringProp);
}
}
Run Code Online (Sandbox Code Playgroud)
此属性仅通过命名绑定在View中:
<TextBox x:Name="VmStringProp" />
Run Code Online (Sandbox Code Playgroud)
这非常有效.但是,如果我将其更改为TextBlock或Lable(下面的示例),则会抛出异常.
<sdk:Label x:Name="VmStringProp" />
Run Code Online (Sandbox Code Playgroud)
它可以正常工作,如果您将其更改为像普通Silverlight一样绑定,但我宁愿在整个项目中保持一致,而不是通过约定绑定某些绑定,而其他绑定则取决于控件的类型.有谁知道为什么我不能通过约定与标签和TextBlocks绑定?
Caliburn.Micro为WPF/SL/WP7提供了一组默认约定,但显然不适用于所有现有控件,因此Silverlight sdk:Label也缺失.
您可以在本文末尾找到内置约定,以及有关约定如何工作的大量信息.
幸运的是,添加新的对话非常容易,只需将以下代码添加到Bootstrapper的构造函数中:
public MyBootstrapper()
{
ConventionManager
.AddElementConvention<Label>(Label.ContentProperty,
"Content",
"DataContextChanged");
}
Run Code Online (Sandbox Code Playgroud)