0

如果我有这样的情况:

<Parent DataContext="...">
    <Child DataContext="..." />
</Parent>

Child 如何访问 Parent 的 DataContext 上的属性?

4

3 回答 3

3

这完全取决于您希望如何访问该属性,以及它的目标位置。您可以使用以下命令直接从 XAMLRelativeSource访问它:

<Parent DataContext="{...}">
    <Child DataContext="{...}"
        TargetProperty="{Binding 
            RelativeSource={RelativeSource AncestorType=Parent},
            Path=DataContext.Property}" 
     />
</Parent>

这假设您拥有或可以TargetPropertyChild.

或者,如果您想从子视图模型访问父视图模型的属性,那么您可能需要考虑将引用、封装引用或弱引用传递给子视图模型。

于 2013-06-05T22:07:17.453 回答
2

通过使用RelativeSourcewithFindAncestor模式:

<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>
于 2013-06-05T22:05:04.107 回答
1

假设父对象的 DC 有一个属性 Foo,读取 Foo.Bar:

DataContext="{Binding Foo}" Text="{Binding Bar}"

或者

Text="{Binding Foo.Bar}"
于 2013-06-05T22:02:57.820 回答