私は次のコントロールを埋め込んでいます(継承ではなく、配置するだけです):
ネイティブTextBlockは、MyGlobalControlに配置されているMyMiddleControlに配置されます。MyMiddleControlには、TextBox.TextにバインドされているDependencyPropery"GroupName"があります。MyGlobalControlには、MyMiddleControl.GroupNameにバインドされているパブリックプロパティ「MyText」があります。
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」ではなく「default」が表示されます。
問題#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。