将数据网格绑定到另一个数据网格的选定项目

时间:2012-01-02 15:22:21

标签: c# wpf data-binding mvvm

我有两个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()
    {
    }

4 个答案:

答案 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的输出窗口查看任何绑定错误。他们会告诉你绑定是否失败。如果你找到绑定错误,那么你的绑定应该解决两个可能的问题......

  1. 数据来源不正确。是否为该UI元素正确设置了数据上下文和项目源,例如DataGrid
  2. 绑定中的属性路径可能不正确。您的SelectedItem对象是否包含任何名为WorkSessions的属性?等
  3. 除此之外,我们仍然不知道您的XAML中的dg_1dg_2是什么。您的代码后面会显示不同的名称datagrid_employeesdatagrid_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。