将数据网格WPF绑定到两个带有列表的不同类
本文关键字:两个 列表 同类 网格 数据网 数据 WPF 绑定 | 更新日期: 2023-09-27 17:52:52
当然,我已经在网上到处搜索了,但我找不到我的问题的解决方案。
我的问题
我有一个包含audiogram (audiogram Class)列表的Patient Class。实际上,我可以在DataGrid中显示患者列表。但是我想在数据网格(WPF)中显示每个病人的听力图。
class Patient
{
public Patient(string patientid, string genre, string createdate)
{
this.patientID = patientid;
this.genre = genre;
this.createDate = createdate;
audiogram = new List<Audiogram>();
}
public string patientID { get; set; }
public string genre{ get; set; }
public string createDate { get; set; }
public List<Audiogram> audiogram { get; set; }
}
class Audiogram
{
public Audiogram(string typeData, string actionDate)
{
this.typeData = typeData;
this.actionData = actionData;
}
public string typeData { get; set; }
public string actionData { get; set; }
}
XmlNodeList nodeList = root.SelectNodes("/pt:NOAH_Patients_Export/pt:Patient/pt:Patient", nsmgr);
foreach (XmlNode node in nodeList)
{
XmlNodeList nodeListAudio = node.SelectNodes("//pt:Actions", nsmgr);
Patient patient = new Patient(node["pt:NOAHPatientId"].InnerText, node["pt:Gender"].InnerText, node["pt:CreateDate"].InnerText);
foreach (XmlNode nodeAudio in nodeListAudio)
{
Audiogram audiogramme = new Audiogram(nodeAudio["pt:TypeOfData"].InnerText, nodeAudio["pt:ActionDate"].InnerText);
patient.audiogram.Add(audiogramme);
}
listPatient.Add(patient);
}
dataGrid_XML.ItemsSource = listPatient;
<>之前您应该使用RowDetails Template
<DataGrid Name="dgUsers" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Birthday" Binding="{Binding Birthday}" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="{Binding audiogram.actionData}" Margin="10" />
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
为什么要设置itemssource两次?dataGrid_XML。ItemsSource = listPatient;and ItemsSource="{Binding Patient}"?你的xaml没有工作,因为列表没有属性typeData。:)它是列表中具有此属性的项。
如果你想绑定你的听力图集合你需要一些itemscontrol。如果你想在一个数据网格中做所有的事情,请查看RowDetailsTemplate。如果你想要你的主网格和第二个列表,例如你选择的行,尝试
<DataGrid AutoGenerateColumns="false" ItemsSource="{Binding ElementName=dataGrid_XML, Path=SelectedItem.audiogram}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding typeData}" Header="Type de données"/>
<DataGridTextColumn Binding="{Binding actionData}" Header="Date de dernière action"/>
</DataGrid.Columns>
</DataGrid>
我找到了一个有效的解决方案,你让我想到了datagrid.items.add()
我有一个问题,如何删除typeData和actionData列的空单元格(第一个单元格)?
c#foreach (XmlNode node in nodeList)
{
XmlNodeList nodeListAudio = node.SelectNodes("//pt:Actions", nsmgr);
Patient patient = new Patient(node["pt:NOAHPatientId"].InnerText, node["pt:Gender"].InnerText, node["pt:CreateDate"].InnerText);
dataGrid_XML.Items.Add(patient);
foreach (XmlNode nodeAudio in nodeListAudio)
{
Audiogram audiogramme = new Audiogram(nodeAudio["pt:TypeOfData"].InnerText, nodeAudio["pt:ActionDate"].InnerText);
dataGrid_XML.Items.Add(audiogramme);
}
}
XAML
<DataGrid x:Name="dataGrid_XML" AutoGenerateColumns="false">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding patientID}" Header="ID Patient" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding genre}" Header="Genre" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding createDate}" Header="Date création" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding typeData}" Header="Type de données" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding actionData}" Header="Date de dernière action" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>