WPF C#使用RelativeSource绑定祖先元素Words属性问题求助
你当前绑定失效的核心原因是:DataTemplate 内加载的 UserControl 默认 DataContext 是 ContentControl 绑定的 CurrentViewModel(也就是 ViewModel1 的实例),而 Words 属性定义在父级 MainWindowViewModel 中,不在 ViewModel1 里,所以默认绑定无法找到目标属性。
你原来的 RelativeSource 写法逻辑本身成立,如果失效大概率是项目存在样式嵌套、视觉树层级变化导致遍历不到对应的 ContentControl,推荐用下面两种更稳妥的绑定方案:
- 向上查找主窗口作为绑定源,不受 ContentControl 层级变化影响
<!-- 注意提前在UserControl头部引入主窗口所在的命名空间对应xmlns:local声明 --> <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}, Path=DataContext.Words}" />
- 给主窗口设置名称后通过ElementName绑定
首先给MainWindow添加名称标识:
<MainWindow Title="MainWindow" x:Name="RootMainWindow"> <!-- 其余代码保持不变 -->
再修改TextBlock的绑定逻辑:
<TextBlock Text="{Binding ElementName=RootMainWindow, Path=DataContext.Words}" />
内容的提问来源于stack exchange,提问作者Imightbehigh
相关产品推荐
相关产品推荐

