将一个数据网格绑定到另一个数据网格的选定项
本文关键字:网格 数据 数据网 另一个 绑定 一个 | 更新日期: 2023-09-27 18:19:10
我有两个datagrid。EmployeeGrid和WorkSessionsGrid。每个Employee都有一个WorkSessions列表,我希望用户通过在EmployeeGrid中选择一个Item来访问它,这将使WorkSessionsGrid为所选的Employee生成WorkSessions。为什么以下内容不正确?
<DataGrid Name="dg_2" ItemsSource="{Binding ElementName=dg_1, Path=SelectedItem.WorkSessions}"/>
我得出的结论是,问题一定出在另外一个层面上。这是我的代码的剩余部分,希望有人能够帮助我。我是否遗漏了什么重要的东西?
后台代码xaml
public partial class MainWindow : Window
{
public EmployeeViewModel EmployeeViewModel = new EmployeeViewModel();
public MainWindow()
{
InitializeComponent();
menu_employee.DataContext = EmployeeViewModel;
sp_employee.DataContext = EmployeeViewModel;
datagrid_employees.ItemsSource = EmployeeViewModel.EmployeesView;
sp_worksessions.DataContext = EmployeeViewModel.SelectedEmployee.WorkSessions;
menu_worksession.DataContext = EmployeeViewModel.SelectedEmployee.WorkSessions;
datagrid_worksessions.ItemsSource = EmployeeViewModel.SelectedEmployee.WorkSessions;
}
}
WorkSessionViewModel
class WorkSessionViewModel : ViewModelBase
{
private WorkSessions _workSessionsModel = new WorkSessions();
public WorkSessions WorkSessionsView = new WorkSessions();
private WorkSessionModel _selectedWorkSession = new WorkSessionModel();
public WorkSessionModel SelectedWorkSession
...
WorkSessionModel
[Serializable]
public class WorkSessions : ObservableCollection<WorkSessionModel>
{
public WorkSessions()
{
}
}
[Serializable]
public class WorkSessionModel : INotifyPropertyChanged
{
private DateTime _dateTime;
private string _id;
private double _hours;
public WorkSessionModel()
{
}
尝试绑定到元素。
<DataGrid Content="{Binding ElementName=ListOfEmp, Path=SelectedItem.Name}" DataContext="{Binding}" />
这一点XAML看起来很正确,试着调试绑定,可能会有一些其他问题,如视觉树断裂或WorkSessions集合可能是一个字段而不是属性等。
如果有绑定错误请分享
请使用Visual Studio的输出窗口查看任何绑定错误。它们将告诉您绑定是否失败。如果你发现绑定错误,那么你的绑定应该解决两个可能的问题…
- 数据源不正确。数据上下文和项目源是否正确地设置了UI元素,如
DataGrid
? - 绑定中属性的路径可能不正确。你的
SelectedItem
有一个对象有任何名为WorkSessions
的属性吗?等。
除此之外,我们仍然不知道dg_1
和dg_2
从你的XAML是什么。我猜你的代码后面显示了不同的名称datagrid_employees
和datagrid_worksessions
。
您应该为EmployeeViewModel再添加一个项目,名为:SelectedEmployee,并将其与员工网格选中的项目mode=TwoWay绑定。
那么第二个网格的数据绑定应该是:
<DataGrid Name="dg_2" ItemsSource="{Binding Path=SelectedEmployee.WorkSessions}"/>
由于两个网格在同一个窗口中,因此,您应该仅为窗口设置数据上下文。在视图模型中,你有2个依赖属性:EmployeeList, selecteemployee。然而,EmployeeList被绑定到员工网格的ItemsSource。selecteemployee被绑定到employee网格上的SelectedItem。