如果我有这样的情况:
<Parent DataContext="...">
<Child DataContext="..." />
</Parent>
Child 如何访问 Parent 的 DataContext 上的属性?
这完全取决于您希望如何访问该属性,以及它的目标位置。您可以使用以下命令直接从 XAMLRelativeSource
访问它:
<Parent DataContext="{...}">
<Child DataContext="{...}"
TargetProperty="{Binding
RelativeSource={RelativeSource AncestorType=Parent},
Path=DataContext.Property}"
/>
</Parent>
这假设您拥有或可以TargetProperty
在Child
.
或者,如果您想从子视图模型访问父视图模型的属性,那么您可能需要考虑将引用、封装引用或弱引用传递给子视图模型。
通过使用RelativeSource
withFindAncestor
模式:
<Grid>
<ContentPresenter Content="{Binding SomeProperty}">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<!-- Here, the DataContext is SomeProperty, so you need to use a RelativeSource to reach the Grid's DataContext -->
<TextBox Text="{Binding DataContext.SomeGridViewModelProperty, RelativeSource={RelativeSource AncestorType=Grid}}"/>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</Grid>
假设父对象的 DC 有一个属性 Foo,读取 Foo.Bar:
DataContext="{Binding Foo}" Text="{Binding Bar}"
或者
Text="{Binding Foo.Bar}"