如果您将您的对象绑定DataGrid到其中ItemsSource的一个,则ObservableCollection<Quote>每个对象都DataGridRow将Quote按照它的原样DataContext(数据层)构建。
默认情况下,DataGrid 将自动为数据项上的每个属性生成一个列,因此在您的情况下,它将为 、 和 生成Ticker一个Rating列Sender。
您可以通过设置AutoGenerateColumns="False"和定义自己的来覆盖它<DataGrid.Columns>,其中包括绑定到的列Sender.Email
<DataGrid ItemsSource="{Binding Quotes}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Ticker" Binding="{Binding Ticker}"/>
<DataGridTextColumn Header="Rating" Binding="{Binding Rating}"/>
<DataGridTextColumn Header="Email" Binding="{Binding Sender.Email}"/>
</DataGrid.Columns>
</DataGrid>
或者您可以使用隐式 DataTemplate 告诉 WPFSender使用包含Email属性的字符串绘制对象
<DataGrid ItemsSource="{Binding Quotes}">
<DataGrid.Resources>
<DataTemplate TargetType="{x:Type local:People}">
<TextBlock Text="{Binding Email}" />
</DataTemplate>
</DataGrid.Resources>
</DataGrid>
在这两个中,我会根据您的情况选择第一个,因为您不需要为编辑之类的事情编写任何额外的代码
至于单击行时获取数据对象,只需检查DataContext行的,或绑定CommandParameter到"{Binding }"