你如何从父对象的DataContext中读取属性?

时间:2013-06-05 21:59:49

标签: c# wpf mvvm

如果我遇到这样的情况:

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

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

3 个答案:

答案 0 :(得分:3)

这完全取决于您希望如何访问该属性以及它的目标位置。您可以使用RelativeSource

直接从XAML 访问
<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}"