在UserControl中使用Datagrid时丢失DataContext

时间:2018-06-11 15:27:47

标签: c# wpf datagrid

考虑一下这个XAML:

<UserControl>
    <TextBlock Text="{Binding NestedObject.Name}" TextWrapping="Wrap"/>
    <DataGrid DataContext="{Binding}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding NestedObject.Name}" />
        </DataGrid.Columns>
    </DataGrid>
</UserControl>

TextBlock的情况下,对象属性将被正确显示,但在DataGrid中使用时,不会显示任何内容。

这很奇怪,因为我在两种情况下都以相同的方式调用它,我认为当没有指定数据上下文时,它会回退到父数据上下文。

我在宣言中遗漏了什么吗?

注意

我使用MainWindow中的UserControl,并将具有NestedObject属性的对象分配给其数据上下文。另外,Name正在实施INotifyPropertyChanged

1 个答案:

答案 0 :(得分:1)

您通常会将DataGrid中的列绑定到DataGrid的{​​{1}}中项目的属性,即您当前的绑定仅适用于ItemsSource属性绑定或设置为ItemsSource,类型IEnumerable<T>具有T属性。

如果要绑定到另一个对象的属性,可以使用SomeObject明确指定绑定的来源:

{RelativeSource}