对Silverlight用户控件自定义属性绑定的困惑

时间:2012-01-01 06:13:52

标签: silverlight binding customproperty

我有UserControl,名为thisUserControl,它有两个控件,如下面的XAML代码所示:

<UserControl
    ...
    x:Name="thisUserControl">
    <StackPanel x:Name="LayoutRoot">
        <Button x:Name="btnChangeString" Content="Change String" Click="btnChangeString_Click" />
        <TextBlock Text="{Binding Path=StringProperty, ElementName=thisUserControl}" />
    </StackPanel>
</UserControl>

BTW,我不知道为什么必须为UserControl设置一个名称,以便我可以在ElementName=thisUserControl中使用它进行绑定。 (我认为如果没有提供this,默认情况下应为ElementName

我还为此UserControl定义了customer属性,还有一些其他代码:

private string sp = "A String Here";
[Bindable(true)]
public string StringProperty
{
    get { return sp; }
    set { sp = value; }
}

private void btnChangeString_Click(object sender, RoutedEventArgs e)
{
    StringProperty = "Something Else";
}

当我编译并运行它时,单击“更改字符串”按钮,没有任何反应。

似乎Bindable(true)根本不起作用。这Bindable(true)是什么意思?

是否有一种简单的方法可以使自定义属性可绑定?让这个UserControl继承INotifyPropertyChanged?或使用DependencyProperty

1 个答案:

答案 0 :(得分:2)

Bindable(true)是一种告诉GUI设计者属性支持双向绑定的方法。但是,要实际实现双向绑定,您必须为该属性实现INotifyPropertyChanged

此外,如果绑定中未提供ElementName,则默认为绑定到DataContext