我有以下控件嵌入(不是继承,只是放置):
Native TextBlock 放在 MyMiddleControl 中,MyMiddleControl 放在 MyGlobalControl 中。MyMiddleControl 有一个 DependencyPropery“GroupName”,它绑定到 TextBox.Text。MyGlobalControl 有一个公共属性“MyText,它绑定到 MyMiddleControl.GroupName。
XAML:
<UserControl x:Class="MyMiddleControl"
...
DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}">
<TextBlock Text="{Binding Path=GroupName}"/>
</UserControl>
和
public static readonly DependencyProperty GroupNameProperty =
DependencyProperty.Register("GroupName", typeof(string),
typeof(MyMiddleControl),
new PropertyMetadata("default"));
public string GroupName
{
get { return (string)GetValue(GroupNameProperty); }
set { SetValue(GroupNameProperty, value); }
}
和
<UserControl x:Class="MyGlobalControl"
...
DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}">
<MyMiddleControl GroupName="{Binding MyText}"... />
</UserControl>
和
public string _myText = "myDef";
public string MyText
{
get { return _myText ; }
set { _myText = value; }
}
问题 #1。当我运行程序时,我在文本块中看到“默认”而不是“myDef”。
问题 #2。我有一个按钮:
private void TestButton_Click(object sender, RoutedEventArgs e)
{
MyText = "TestClick";
}
结果是一样的:“默认”。
为什么?:(
更新:
我忘了说。如果我做
<UserControl x:Class="MyGlobalControl"
...
DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}">
<MyMiddleControl GroupName="FixedTest"... />
</UserControl>
它工作正常。
PS。与第一个答案不同的示例项目:TestBind.zip。