如果您将您的对象绑定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 }"