C# 将行详细信息显示为datagrid
我有一个datagrid,其中的项目是列表(只是一个更容易理解的示例):C# 将行详细信息显示为datagrid,c#,wpf,datagrid,detailview,C#,Wpf,Datagrid,Detailview,我有一个datagrid,其中的项目是列表(只是一个更容易理解的示例): 公共类人物 { 公共字符串名{get;set;} 公共字符串LastName{get;set;} 上市公司{get;set;} } 公营公司 { 公共字符串名称{get;set;} 公共字符串City{get;set;} } 现在我想在我的RowDetailsTemplate中显示公司 我试过这么做 <DataGrid.RowDetailsTemplate> <DataTemplate&
公共类人物
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
上市公司{get;set;}
}
公营公司
{
公共字符串名称{get;set;}
公共字符串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的my ItemsSource是一个列表(它是只读的,只用于显示,不用于编辑数据)
我的问题是,我似乎无法访问这些公司,而VS/R只表示列表(在我的viewModel中包含人员姓名)可用
但是我想访问每行的数据,而不是每行的数据。我该怎么做呢?让我用一个例子来解释一下。复制粘贴以下代码,并将断点放在SelectedEmployee
的get
和set
上
现在运行代码并单击其他行。您将获得包含详细信息列表的保留行项目
main window.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; }
}
//
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
var detail1=newemployeedetails(){ManagerID=11,ManagerName=“11 Name”,ManagerMobile=“123456”};
var detail2=newemployeedetails(){ManagerID=12,ManagerName=“12 Name”,ManagerMobile=“123456”};
var detail3=newemployeedetails(){ManagerID=13,ManagerName=“13 Name”,ManagerMobile=“123456”};
var detail4=newemployeedetails(){ManagerID=11,ManagerName=“11 Name”,ManagerMobile=“123456”};
var detail5=newemployeedetails(){ManagerID=12,ManagerName=“12 Name”,ManagerMobile=“123456”};
var detail6=newemployeedetails(){ManagerID=13,ManagerName=“13 Name”,ManagerMobile=“123456”};
var detail7=newemployeedetails(){ManagerID=11,ManagerName=“11 Name”,ManagerMobile=“123456”};
var detail8=newemployeedetails(){ManagerID=12,ManagerName=“12 Name”,ManagerMobile=“123456”};
var detail9=newemployeedetails(){ManagerID=13,ManagerName=“13 Name”,ManagerMobile=“123456”};
var details1=新列表();
详情1.添加(详情1);
详情1.添加(详情2);
详情1.添加(详情3);
var details2=新列表(){detail4,detail5,detail6};
var details3=新列表(){detail7,detail8,detail9};
雇员=新名单();
Add(new Employee(){ID=1,Name=“Name1”,Details=details1});
Add(newemployee(){ID=2,Name=“Name2”,Details=details2});
Add(newemployee(){ID=3,Name=“Name3”,Details=details3});
所选员工=员工[1];
this.DataContext=this;
}
公共列表雇员{get;set;}
选择私人雇员;
公共雇员选定雇员
{
获取{return\u selected;}
设置{u selected=value;}
}
}
公营雇员
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共列表详细信息{get;set;}
}
公共类雇员详细信息
{
public int ManagerID{get;set;}
公共字符串管理器名称{get;set;}
公共字符串管理器移动{get;set;}
}
那么您想访问所选行的详细信息(公司)吗?你在MVVM吗?是的,是的。如果有帮助的话,我用棱镜。相反,我计划以任何方式显示所有详细信息,但这是RowDetailsTemplate提供的功能,但我想访问我的行的数据,这里我的行是什么意思?你知道,每一行都由一个ViewModel表示。此viewmodel有一个公司列表。我希望这些公司在该行的详细视图中位于datagrid中。我的行不具体,每行都是一样的。你已经这样做了。每一行都表示为个人
,该行的详细信息将显示相应行的公司列表公司
。非常感谢。有时候你只需要有人指出你很笨。然而,如果我没有正确的方法,它就会解决我的问题。回答得好!
/// <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; }
}