2016-07-21 7 views
0

Ich habe ein Datagrid, die Einzelteile sind Liste von (nur ein Beispiel zum besseren Verständnis):Anzeige Zeile Details wie Datagrid

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public List<Company> Companies { get; set; } 
} 

public class Company 
{ 
    public string Name { get; set; } 
    public string City { get; set; } 
} 

Und nun möchte ich die Unternehmen in meinem RowDetailsTemplate anzuzeigen.

Ich habe versucht, diese

<DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <DataGrid ItemsSource="{Binding Companies}"> 
       [im trying to access the data of the row here] 
      </DataGrid> 
     </DataTemplate> 
</DataGrid.RowDetailsTemplate> 

Und meine Itemssource des Datagrid zu tun ist, eine Liste (seine nur lesbar, es ist einfach angezeigt werden, keine Daten bearbeiten.)

Mein Problem ist, dass ich scheint nicht auf die Firmen zuzugreifen, sondern VS/R # sagt nur, dass die List<Person> (mit dem Namen Personen in meinem ViewModel) verfügbar ist.

Aber ich möchte auf die Daten pro Zeile zugreifen, nicht alle Daten aller Zeilen. Wie mache ich das?

+0

So möchten Sie das Detail (Firmen) der ausgewählten Zeile zuzugreifen? Sind Sie in MVVM? – Gopichandar

+0

Ja, und ja. Ich benutze Prisma, wenn das hilft. Nun, ich plane sowieso, alle Details anzuzeigen, aber das ist eine Funktionalität, die RowDetailsTemplate sowieso bereitstellt. – Mafii

+0

_Aber ich möchte auf die Daten meiner Zeile zugreifen, was Sie mit _my row_ hier meinen? – Gopichandar

Antwort

1

Lassen Sie mich Ihnen ein Beispiel erklären. Kopieren Sie den folgenden Code und setzen Sie den Breakpoint auf get und set von SelectedEmployee.

Jetzt den Code ausführen und auf die andere Zeile klicken. Sie erhalten den entsprechenden Zeileneintrag mit einer Liste von Details.

MainWindow.xaml

<DataGrid ItemsSource="{Binding Employees}" SelectedItem="{Binding SelectedEmployee}" > 
     <DataGrid.RowDetailsTemplate> 
      <DataTemplate> 
       <DataGrid ItemsSource="{Binding Details}"/> 
      </DataTemplate> 
     </DataGrid.RowDetailsTemplate> 
    </DataGrid> 

MainWindow.xaml.cs

/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var detail1 = new EmployeeDetails() { ManagerID = 11, ManagerName = "11 Name", ManagerMobile = "123456" }; 
     var detail2 = new EmployeeDetails() { ManagerID = 12, ManagerName = "12 Name", ManagerMobile = "123456" }; 
     var detail3 = new EmployeeDetails() { ManagerID = 13, ManagerName = "13 Name", ManagerMobile = "123456" }; 

     var detail4 = new EmployeeDetails() { ManagerID = 11, ManagerName = "11 Name", ManagerMobile = "123456" }; 
     var detail5 = new EmployeeDetails() { ManagerID = 12, ManagerName = "12 Name", ManagerMobile = "123456" }; 
     var detail6 = new EmployeeDetails() { ManagerID = 13, ManagerName = "13 Name", ManagerMobile = "123456" }; 

     var detail7 = new EmployeeDetails() { ManagerID = 11, ManagerName = "11 Name", ManagerMobile = "123456" }; 
     var detail8 = new EmployeeDetails() { ManagerID = 12, ManagerName = "12 Name", ManagerMobile = "123456" }; 
     var detail9 = new EmployeeDetails() { ManagerID = 13, ManagerName = "13 Name", ManagerMobile = "123456" }; 

     var details1 = new List<EmployeeDetails>(); 
     details1.Add(detail1); 
     details1.Add(detail2); 
     details1.Add(detail3); 

     var details2 = new List<EmployeeDetails>() { detail4, detail5, detail6 }; 
     var details3 = new List<EmployeeDetails>() { detail7, detail8, detail9 }; 

     Employees = new List<Employee>(); 
     Employees.Add(new Employee() { ID = 1, Name = "Name1", Details = details1 }); 
     Employees.Add(new Employee() { ID = 2, Name = "Name2", Details = details2 }); 
     Employees.Add(new Employee() { ID = 3, Name = "Name3", Details = details3 });    

     SelectedEmployee = Employees[1]; 

     this.DataContext = this; 
    } 

    public List<Employee> Employees { get; set; } 

    private Employee _selected; 

    public Employee SelectedEmployee 
    { 
     get { return _selected; } 
     set { _selected = value; } 
    } 


} 

public class Employee 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public List<EmployeeDetails> Details { get; set; } 
} 

public class EmployeeDetails 
{ 
    public int ManagerID { get; set; } 
    public string ManagerName { get; set; } 
    public string ManagerMobile { get; set; } 

} 
+0

Vielen Dank. Manchmal brauchst du nur jemanden, der darauf hinweist, dass du dumm bist. Wenn ich jedoch nicht den richtigen Ansatz hätte, hätte ich mein Problem gelöst. Gute Antwort! – Mafii

Verwandte Themen