UserControl中的DependencyProperty不会从绑定更新

时间:2010-11-30 17:36:38

标签: wpf xaml binding user-controls

以下是我的问题的再现:

  • 创建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>

如您所见,当MainWindow.Title发生更改时,UserControl1.MyText属性不会更新。

我错过了什么?我希望将用户控件连接到父属性,是否有一种简单的方法来执行此操作?

1 个答案:

答案 0 :(得分:2)

好的,当我重新创建应用程序时(我正在使用C#,所以我认为这不会有任何区别),我注意到在我的输出中绑定失败,因为UserControl没有Title属性。

ElementName=this添加到您的UserControl1绑定中。并将Window上的Name属性设置为this,这应该修复它。

这样的事情:

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

当我这样做时,绑定对我有用。希望有所帮助!