C# 如何绑定到视图';s的DataContext而不是最里面的DataContext?
一些伪代码用作示例:C# 如何绑定到视图';s的DataContext而不是最里面的DataContext?,c#,wpf,data-binding,datacontext,C#,Wpf,Data Binding,Datacontext,一些伪代码用作示例: <UserControl> <UserControl.DataContext> <vm:MyViewModel /> </UserControl.DataContext> <Grid> <StackPanel DataContext="{Binding SomeOtherContext}"> <TextBlock T
<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
绑定从最外层的DataContext
提取其属性,而不是在中间的StackPanel
中设置的属性
我发现类似的示例建议在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>
SomeOtherContext是MyViewModel的属性吗?是的。它实际上是一个数据模型的实例。这实际上很好用。运行应用程序时,请确保所有属性都已初始化,并且输出中没有绑定错误。您的怀疑似乎是正确的…在我尚未注意到的无关绑定上抛出了一个错误。正在修复使此引用能够正常工作的问题。谢谢,投反对票,嗯?因为。。。?