如何绑定到视图的 DataContext 而不是最里面的 DataContext?
How can I bind to the View's DataContext and not the innermost DataContext?
一些伪代码作为示例:
<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>
所以,我正在寻找的是代替“THE FIRST CONTEXT”所必需的绑定语法,以使最里面的 TextBlock
绑定拉动其 属性 从最外面的 DataContext
,而不是中间的 StackPanel
.
我发现像 this one 这样的示例建议在 TextBlock
绑定中执行此操作,但如果我在那里有大量控件,那就需要大量额外的编码。我宁愿在该特定范围内设置一个新的 DataContext
,以便内部绑定语法更易于阅读。
尝试以下操作:
<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>
一些伪代码作为示例:
<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>
所以,我正在寻找的是代替“THE FIRST CONTEXT”所必需的绑定语法,以使最里面的 TextBlock
绑定拉动其 属性 从最外面的 DataContext
,而不是中间的 StackPanel
.
我发现像 this one 这样的示例建议在 TextBlock
绑定中执行此操作,但如果我在那里有大量控件,那就需要大量额外的编码。我宁愿在该特定范围内设置一个新的 DataContext
,以便内部绑定语法更易于阅读。
尝试以下操作:
<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>