将行详细信息显示为datagrid

时间:2016-07-21 10:02:35

标签: c# wpf datagrid detailview

我有一个数据网格,这些项目是列表(只是为了便于理解的一个例子):

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; }
}

现在我想在我的RowDetailsTemplate中显示这些公司。

我试过这样做

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

我的datagrid的ItemsSource是一个List(它的readonly,它只是为了显示,而不是编辑数据。)

我的问题是,我似乎无法访问公司,而是VS / R#只表示List<Person>(我的viewModel中名为Persons)可用。

但我想访问每行的数据,而不是所有行的每个数据。我该怎么做?

1 个答案:

答案 0 :(得分:1)

让我用一个例子来解释你。复制粘贴以下代码并将断点放在get setSelectedEmployee上。

现在运行代码并单击其他行。您将获得包含详细信息列表的resepctive行项目。

<强> 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; }

}
相关问题