DependencyProperty в UserControl не обновляется при связывании - PullRequest
0 голосов
/ 30 ноября 2010

Вот воспроизведение моей проблемы:

  • Создание приложения WPF
  • Добавление нового UserControl в проект
  • Замените его содержимое следующим

<UserControl 
  x:Class="UserControl1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  DataContext="{Binding RelativeSource={RelativeSource Self}}">
  <TextBlock Text="{Binding MyText}"/>
</UserControl>

Public Class UserControl1
  Public Property MyText As String
    Get
      Return GetValue(MyTextProperty)
    End Get
    Set(ByVal value As String)
      SetValue(MyTextProperty, value)
    End Set
  End Property
  Public Shared ReadOnly MyTextProperty As DependencyProperty =
   DependencyProperty.Register("MyText", GetType(String), GetType(UserControl1))
End Class
  • Замените в файле MainWindow.xaml следующее:

<Window 
  x:Class="MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:src="clr-namespace:WpfApplication1"
  Title="MainWindow"
  DataContext="{Binding RelativeSource={RelativeSource Self}}">
  <StackPanel >    
    <TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}"/>
    <src:UserControl1 MyText="{Binding Title}"/>
  </StackPanel>
</Window>

Как вывидно, что свойство UserControl1.MyText не обновляется при изменении MainWindow.Title.

Чего мне не хватает?Я хочу, чтобы пользовательский элемент управления был подключен к родительскому свойству, есть ли способ сделать это xamly?

1 Ответ

2 голосов
/ 30 ноября 2010

Хорошо, когда я воссоздаю приложение (я использую C #, поэтому я не думаю, что это будет иметь какое-либо значение), я замечаю в своем выводе, что привязка не выполняется, потому что UserControl не имеет свойства Title.

Добавьте ElementName=this к вашему UserControl1 переплету.И установите свойство Name в Window на это, и это должно исправить это.

Примерно так:

<src:UserControl1 MyText="{Binding Title, ElementName=this}" />

Привязка работает для меня, когда я это делаю.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...