如何绑定到View的DataContext而不是最内层的DataContext?

时间:2017-05-12 14:27:25

标签: c# wpf data-binding 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>

所以,我正在寻找的是必要的绑定语法代替“第一个上下文”,以使最里面的TextBlock绑定从最外面的{{1}拉出它的属性},而不是在中间DataContext设置的那个。

我发现像this one这样的示例提示了在StackPanel绑定中执行此操作的方法,但如果我在其中有大量控件,则会进行大量额外编码。我宁愿在该特定范围内设置一个新的TextBlock,以便内部绑定语法更清晰。

1 个答案:

答案 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>