我有两个DataGrids。 EmployeeGrid和WorkSessionsGrid。每个Employee都有一个WorkSession列表,我希望用户通过在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()
{
}
答案 0 :(得分:0)
尝试绑定到元素。
<DataGrid Content="{Binding ElementName=ListOfEmp, Path=SelectedItem.Name}" DataContext="{Binding}" />
答案 1 :(得分:0)
这个XAML看起来非常正确,尝试debug the binding,可能还有一些其他问题,如可视化树中断或WorkSessions集合perchance是一个字段而不是属性等。
如果存在绑定错误,请分享。
答案 2 :(得分:0)
作为@ H.B。已正确指出,请使用Visual Studio的输出窗口查看任何绑定错误。他们会告诉你绑定是否失败。如果你找到绑定错误,那么你的绑定应该解决两个可能的问题......
DataGrid
?SelectedItem
对象是否包含任何名为WorkSessions
的属性?等除此之外,我们仍然不知道您的XAML中的dg_1
和dg_2
是什么。您的代码后面会显示不同的名称datagrid_employees
和datagrid_worksessions
我猜。
答案 3 :(得分:0)
您应该为EmployeeViewModel添加一个名为:SelectedEmployee的项目,并将其与员工网格选定项目绑定,mode = TwoWay。
然后你对第二个网格的数据绑定应该是:
<DataGrid Name="dg_2" ItemsSource="{Binding Path=SelectedEmployee.WorkSessions}"/>
由于两个网格都在同一窗口中,因此,您只应为Windows设置datacontext。在viewmodel中,您有2个依赖项属性:EmployeeList,SelectedEmployee。而EmployeeList绑定到员工网格的ItemsSource。 SelectedEmployee绑定到员工网格上的SelectedItem。