C# 如何从父对象读取属性';什么是数据上下文?

C# 如何从父对象读取属性';什么是数据上下文?,c#,wpf,mvvm,C#,Wpf,Mvvm,如果我遇到这样的情况: <Parent DataContext="..."> <Child DataContext="..." /> </Parent> 子对象如何访问父对象DataContext上的属性?假设父对象的DC具有属性Foo,则读取Foo.Bar: DataContext="{Binding Foo}" Text="{Binding Bar}" 或 假设父对象的DC具有属性Foo,则要读取Foo.Bar: DataContext="

如果我遇到这样的情况:

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


子对象如何访问父对象DataContext上的属性?

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

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


假设父对象的DC具有属性Foo,则要读取Foo.Bar:

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

通过使用with模式:


通过使用with模式:


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

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

这假设您拥有或可以创建
子对象上的依赖项属性
TargetProperty


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

这完全取决于您想要如何访问该属性以及它的目标。您可以使用

RelativeSource
直接从XAML访问它:

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

这假设您拥有或可以创建
子对象上的依赖项属性
TargetProperty

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