我有一个数据网格,这些项目是列表(只是为了便于理解的一个例子):
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)可用。
但我想访问每行的数据,而不是所有行的每个数据。我该怎么做?
答案 0 :(得分:1)
让我用一个例子来解释你。复制粘贴以下代码并将断点放在get
的set
和SelectedEmployee
上。
现在运行代码并单击其他行。您将获得包含详细信息列表的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; }
}