考虑一下这个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
。
答案 0 :(得分:1)
您通常会将DataGrid
中的列绑定到DataGrid
的{{1}}中项目的属性,即您当前的绑定仅适用于ItemsSource
属性绑定或设置为ItemsSource
,类型IEnumerable<T>
具有T
属性。
如果要绑定到另一个对象的属性,可以使用SomeObject
明确指定绑定的来源:
{RelativeSource}