以下是我的问题的再现:
<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
<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属性不会更新。
我错过了什么?我希望将用户控件连接到父属性,是否有一种简单的方法来执行此操作?
答案 0 :(得分:2)
好的,当我重新创建应用程序时(我正在使用C#,所以我认为这不会有任何区别),我注意到在我的输出中绑定失败,因为UserControl没有Title属性。
将ElementName=this
添加到您的UserControl1
绑定中。并将Window上的Name属性设置为this,这应该修复它。
这样的事情:
<src:UserControl1 MyText="{Binding Title, ElementName=this}" />
当我这样做时,绑定对我有用。希望有所帮助!