如何将对象显示为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?@tesla1060DataGrid。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>