如果我遇到这样的情况:
<Parent DataContext="...">
<Child DataContext="..." />
</Parent>
Child如何访问Parent的DataContext上的属性?
答案 0 :(得分:3)
这完全取决于您希望如何访问该属性以及它的目标位置。您可以使用RelativeSource
<Parent DataContext="{...}">
<Child DataContext="{...}"
TargetProperty="{Binding
RelativeSource={RelativeSource AncestorType=Parent},
Path=DataContext.Property}"
/>
</Parent>
这假设您在TargetProperty
上拥有或可以创建依赖项属性Child
。
或者,如果要从子视图模型
访问父视图模型的属性,则可能需要考虑传递引用,封装引用或弱引用,对孩子的观点模型。答案 1 :(得分:2)
使用RelativeSource
FindAncestor
模式:
<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>
答案 2 :(得分:1)
假设父对象的DC具有属性Foo,则读取Foo.Bar:
DataContext="{Binding Foo}" Text="{Binding Bar}"
OR
Text="{Binding Foo.Bar}"