我的主窗口有以下部分的XAML
<StackPanel>
<TextBox x:Name="textbox1" />
<my:UserControl1 />
</StackPanel>
my:UserControl1就像这样
<TextBox x:Name="userControlTextBox" />
我想将上面文本框的Text属性绑定到外部文本框的Text属性。 我试过了
<TextBox x:Name="userControlTextBox" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=textbox1.Text}" />
答案 0 :(得分:1)
您不能像问题中显示的那样绑定。有两种方法可以实现这一目标:
首先 ,将textBox1的Text绑定到ViewModel中的某个属性。并将userControlTextBox的Text绑定到相同的绑定属性。
<TextBox x:Name="textbox1" Text="{Binding SomeProperty}"/>
并在UserControl中
<TextBox x:Name="userControlTextBox" Text="{Binding SomeProperty}"/>
确保您的属性通知(INPC应通过包含类实现),以便其中的任何更改都传播到GUI。
第二个 将在您的userControl类型字符串上创建自定义DP。使用textbox1的Text值绑定该DP。并将userControlTextBox的Text绑定到该DP。
<StackPanel>
<TextBox x:Name="textbox1" />
<my:UserControl1 TextValue="{Binding Text, ElementName=textBox1}"/>
</StackPanel>
此处, TextValue
是您在userControl中声明的自定义DP。
public string CustomValue
{
get { return (string)GetValue(CustomValueProperty); }
set { SetValue(CustomValueProperty, value); }
}
public static readonly DependencyProperty CustomValueProperty =
DependencyProperty.Register("CustomValue", typeof(string),
typeof(UserControl1));
现在,在UserControl中绑定textBox,如下所示:
<TextBox x:Name="userControlTextBox"
Text="{Binding TextValue, RelativeSource={RelativeSource FindAncestor,
AncestorType=UserControl}}"/>