2

我一直在 Silverlight 5 中通过约定使用 Caliburn.Micro 的绑定,我很喜欢它。这是来自 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 一样绑定,它可以正常工作,但我宁愿在整个项目中保持一致,而不是通过约定进行一些绑定,而另一些则根据控件类型显式绑定。有谁知道为什么我不能通过约定与标签和文本块绑定?

4

1 回答 1

7

Caliburn.Micro 为 WPF/SL/WP7 提供了一组默认约定,但显然不是针对每个现有控件,因此sdk:Label也缺少 Silverlight。

您可以在本文末尾找到内置约定以及约定如何工作的大量信息。

幸运的是,添加一个新的 convection 非常容易,只需将以下代码添加到 Bootstrapper 的构造函数中:

public MyBootstrapper()
{
    ConventionManager
        .AddElementConvention<Label>(Label.ContentProperty, 
                                    "Content", 
                                    "DataContextChanged");  
}
于 2012-08-28T19:06:09.513 回答