2014-03-25 3 views
1

물론 웹상의 모든 곳을 검색했지만 내 문제의 해결책을 찾을 수 없습니다.DataGrid WPF를 목록이있는 두 개의 다른 클래스에 바인딩합니까?

내 문제

내가 청력도 (Audiogramm 클래스)의 목록이 포함되어 환자 클래스가 있습니다. 사실 DataGrid에 환자 목록을 표시 할 수 있습니다. 그러나 각 환자에 대해 Audiogram을 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; 
 
<DataGrid x:Name="dataGrid_XML" AutoGenerateColumns="false" ItemsSource="{Binding Patient}"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding patientID}" Header="ID Patient"/> 
     <DataGridTextColumn Binding="{Binding genre}" Header="Genre"/>    
     <DataGridTextColumn Binding="{Binding createDate}" Header="Date création"/> 
     <DataGridTextColumn Binding="{Binding audiogram.typeData}" Header="Type de données"/> 
     <DataGridTextColumn Binding="{Binding audiogram.actionData}" Header="Date de dernière action"/> 
    </DataGrid.Columns> 
</DataGrid> 

답변

0

당신이 두 번 itemssource을 설정 왜 당신은 RowDetails 템플릿

<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> 
+0

덕분에,이 솔루션은 나를 위해 작동하지만 난 RowDetailsTemplate을 피하고자합니다. DataGrid.items.add()를 사용하여 하나의 작업 솔루션을 찾았습니다. 가능한 경우 솔루션을 게시합니다. – Wiomarch

0

로 가야하나요? dataGrid_XML.ItemsSource = listPatient; ItemsSource = "{바인딩 환자}"? List에 typeData 속성이 없으므로 xaml이 작동하지 않았습니다. :)이 속성을 가진 목록 내에서 귀하의 항목.

청력도 컬렉션을 묶고 싶다면 itemscontrol이 필요합니다. 하나의 DataGrid에서 모든 작업을 수행하려면 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> 
0

선택한 행이 시도 당신이 당신의 mastergrid와 예에 대한 두 번째 목록을 가지고 싶다면, 당신은 저를()

을 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> 
관련 문제