一些伪代码作为例子:
<UserControl>
<UserControl.DataContext>
<vm:MyViewModel />
</UserControl.DataContext>
<Grid>
<StackPanel DataContext="{Binding SomeOtherContext}">
<TextBlock Text="{Binding MyString}" />
<Grid DataContext="THE FIRST CONTEXT">
<TextBlock Text="{Binding PropertyFromFirstContext}" />
</Grid>
</StackPanel>
</Grid>
</UserControl>
所以,我正在寻找的是必要的绑定语法代替“第一个上下文”,以使最里面的TextBlock
绑定从最外面的{{1}拉出它的属性},而不是在中间DataContext
设置的那个。
我发现像this one这样的示例提示了在StackPanel
绑定中执行此操作的方法,但如果我在其中有大量控件,则会进行大量额外编码。我宁愿在该特定范围内设置一个新的TextBlock
,以便内部绑定语法更清晰。
答案 0 :(得分:3)
尝试以下方法:
<UserControl x:Name="Parent">
<UserControl.DataContext>
<vm:MyViewModel />
</UserControl.DataContext>
<Grid>
<StackPanel DataContext="{Binding SomeOtherContext}">
<TextBlock Text="{Binding MyString}" />
<Grid DataContext="{Binding DataContext, ElementName=Parent}">
<TextBlock Text="{Binding PropertyFromFirstContext}" />
</Grid>
</StackPanel>
</Grid>
</UserControl>