0

という名前の UserControl がthisUserControlあり、次の XAML コードに示すように 2 つのコントロールがあります。

<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>

UserControlところで、なぜ名前を設定して のバインドに使用できるようにする必要があるのか​​ わかりませんElementName=thisUserControlthis(提供されていない場合はデフォルトであるはずだと思いましたElementName

また、他のコードを使用して、この UserControl の顧客プロパティを定義しました。

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ますか?

4

1 に答える 1

2

Bindable(true)は、プロパティが双方向バインディングをサポートしていることを GUI デザイナーに伝える方法です。ただし、実際に双方向バインディングを実装するには、そのプロパティを実装する必要がありますINotifyPropertyChanged

また、ElementNameバインディングで が提供されていない場合、デフォルトでは にバインドされDataContextます。

于 2012-01-01T06:44:35.657 に答える