如何将对象显示为wpf datagrid的一行并将其转换回对象

如何将对象显示为wpf datagrid的一行并将其转换回对象,wpf,datagrid,datatemplate,Wpf,Datagrid,Datatemplate,我有一个类似的物体 class Quote { string Ticker {set; get; } string Rating {set; get;} People Sender {set; get;} } Peaple的定义是 class People { string Email {set; get;} int Age {set; get;} string Firm {set; get;} } 我还有一个明显的报价收集 Observabl

我有一个类似的物体

class Quote
{
    string Ticker {set; get; }
    string Rating {set; get;}
    People Sender {set; get;}
}
Peaple的定义是

class People
{
    string Email {set; get;}
    int Age {set; get;}
    string Firm {set; get;}
}
我还有一个明显的报价收集

ObservableCollection <Quote> QuoteList;
observedcollection QuoteList;
现在我想在DataGrid中显示QuoteList,这样每行都有以下3个单元格, 1.报价单 2.报价.评级 3.Quote.Sender.Email

我还想,如果我单击每一行,我可以得到该单击行的Quote对象。
我可以问一下如何实现这一点吗?

如果您将
数据网格
绑定到
可观察集合的
项源
,则每个
数据网格行
都将使用
引用
对象作为
数据上下文
(数据层)构建

默认情况下,DataGrid将自动为数据项上的每个属性生成一列,因此在您的情况下,它将为
Ticker
Rating
Sender
生成一列

您可以通过设置
AutoGenerateColumns=“False”
并定义自己的
,其中包括绑定到
发件人的列。电子邮件

<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>
在这两种情况中,我会根据您的情况选择第一种,因为您不需要为编辑之类的事情编写任何额外的代码


至于在单击行时获取数据对象,只需查看该行的
DataContext
,或者将您的
CommandParameter
绑定到
“{Binding}”

嗨,您介意给我看一个关于如何将列作为数据模板的链接吗?谢谢,我已经尝试了方法1,但是当我
Quote=(Quote)时MasterAllGrid.SelectedItem
,Quote中的发送方为空,如何获取所选列的DataContext?@tesla1060
DataGrid。SelectedItem
将返回该行绑定到的数据项,因此如果您将
DataGrid
绑定到一个
ObservableCollection
上,它将为所选行返回一个
Quote
对象。你能验证一下你的
Quote
数据项的
Sender
设置是否为非空吗?@tesla1060没问题:)另外,如果这篇文章回答了你的问题,请勾选旁边的绿色复选标记,将答案标记为已接受谢谢提醒,我不知道,现在我已经勾选了我之前的所有问题,这也提高了我的声誉。
<DataGrid ItemsSource="{Binding Quotes}">
    <DataGrid.Resources>
        <DataTemplate TargetType="{x:Type local:People}">
            <TextBlock Text="{Binding Email}" />
        </DataTemplate>
    </DataGrid.Resources>
</DataGrid>