2012-01-01 82 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

相關問題