2012-01-01 80 views
0

我有用户控件,命名为thisUserControl,它具有如下面的XAML代码所示两个控件:混乱Silverlight的用户控件自定义属性结合

<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

我还定义了客户属性此用户控件,与其他一些代码:

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

回答

2

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

另外,如果没有在绑定中提供ElementName,则默认为绑定到DataContext

+0

我添加了这个'DataContext =“{Binding RelativeSource = {RelativeSource Self}}”'作为默认绑定,并且它可以工作。那Bindable(真)真的很混乱。我也试过INotifyPropertyChanged,它也可以。但INotifyPropertyChanged不适用于MultiBinding:http://www.codeproject.com/KB/silverlight/SilverlightMultiBinding.aspx – 2012-01-01 06:57:26

+0

对不起。它也适用于MultiBinding。 – 2012-01-01 08:13:51

相关问题