我的 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=''); 目标属性是“文本”(类型“字符串”)
我想我错过了一些明显的东西,但我不知道是什么。
您应该能够以与绑定到窗口相同的方式绑定到用户控件:
DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1,AncestorType=UserControl}}">
Run Code Online (Sandbox Code Playgroud)
你已经尝试是指相对于源Self从TextBox。但是,在这种情况下,Self指的是TextBox,而不是封闭的用户控件。
| 归档时间: |
|
| 查看次数: |
3413 次 |
| 最近记录: |