如何将 DataContext 设置为 self

Dav*_*ave 3 c# wpf xaml

我的 UserControl 需要绑定到祖先(祖先是 MainWindow)和它自己(它是后面的代码)。

为了绑定到祖先,我正在使用

DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1,AncestorType=Window}}"> 
Run Code Online (Sandbox Code Playgroud)

要将控件绑定到后面的代码(从而使用“本地”DataContext),我使用

<TextBlock Text ="{Binding MyUC3Property}" Name="MyName" />
Run Code Online (Sandbox Code Playgroud)

并在后面的代码中,将其设置为

this.MyName.DataContext = this;
Run Code Online (Sandbox Code Playgroud)

以上工作正常,我可以绑定到代码隐藏和祖先。

现在,我仍然想绑定到后面的代码和祖先,但只在 XAML 中设置 DataContext(如果可能)。

我试过了

<TextBlock Text ="{Binding MyUC3Property}" DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}" /> 
Run Code Online (Sandbox Code Playgroud)

并确保构造函数不设置 DataContext(因为我希望在 XAML 中完成所有操作)-(尽管即使我设置this.DataContext = this;了错误仍然存​​在)

并且输出窗口告诉我存在绑定错误。

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“TextBlock”(名称 =“”)上找不到“MyUC3Property”属性。BindingExpression:Path=MyUC3Property; DataItem='TextBlock' (Name=''); 目标元素是 'TextBlock' (Name=''); 目标属性是“文本”(类型“字符串”)

我想我错过了一些明显的东西,但我不知道是什么。

O. *_*per 9

您应该能够以与绑定到窗口相同的方式绑定到用户控件:

DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1,AncestorType=UserControl}}">
Run Code Online (Sandbox Code Playgroud)

你已经尝试是指相对于源SelfTextBox。但是,在这种情况下,Self指的是TextBox,而不是封闭的用户控件。