Путаница в привязке пользовательского элемента управления Silverlight - PullRequest
0 голосов
/ 01 января 2012

У меня есть 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>

Кстати, я не знаю, почему я должен установить имя для UserControl, чтобы я мог использовать его для Binding в ElementName=thisUserControl. (Я думал, что это должно быть this по умолчанию, если ElementName не предоставлено)

Я также определил свойство customer для этого 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?

1 Ответ

2 голосов
/ 01 января 2012

Bindable(true) - это способ сообщить конструктору графического интерфейса, что свойство поддерживает двустороннее связывание.Однако для реализации двухсторонней привязки необходимо реализовать INotifyPropertyChanged для этого свойства.

Кроме того, если ElementName не предусмотрено в привязке, по умолчанию используетсяпривязать к DataContext.

...