WPF.Net 4.0 MVVM将DataGrid单元格绑定到数组元素对象

WPF.Net 4.0 MVVM将DataGrid单元格绑定到数组元素对象,wpf,arrays,datagrid,binding,matrix,Wpf,Arrays,Datagrid,Binding,Matrix,我正在创建一个时间表应用程序,其中有一个员工列表和一个分配时间的编码列表 我已经创建了一个DataMatrix,我已经让网格看起来很好,除了小时的数据输入 网格看起来像 Work Coding | AL | Sick | Job1 | Job2 ____________________________________________ Employee1 | | | | Employee2 | | | | p

我正在创建一个时间表应用程序,其中有一个员工列表和一个分配时间的编码列表

我已经创建了一个DataMatrix,我已经让网格看起来很好,除了小时的数据输入

网格看起来像

Work Coding  |   AL | Sick |  Job1 | Job2
____________________________________________
Employee1    |      |      |       |
Employee2    |      |      |       |



public class DataMatrix : IEnumerable
{
    public List<MatrixColumn> Columns { get; set; }
  //  public List<object[]> Rows { get; set; }
    public List<TimesheetDetail[]> Rows { get; set; }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return new GenericEnumerator(Rows.ToArray());
    }
}
我想要它看起来像什么

Work Coding  |   AL | Sick |  Job1 | Job2
____________________________________________
Employee1    |      |      |   2   |
数据模板如下所示

 <DataTemplate x:Key="TimesheetEntryDetailCellTemplate"
                  DataType="{x:Type data:TimesheetDetail}">
        <Grid>...
              <Label Content="ST" />
            <TextBox x:Name="txtStandardTime"
                    Text="{Binding   Path=HoursWorked, ...}"></TextBox>
 </Grid>
 </DataTemplate>

...
通过调试,我得到了一个要绑定到的TimesheetDetail[]对象

我想我需要像这样的东西

  <TextBox Text="{Binding Source = TimesheetDetail[ColumnDisplayIndex].HoursWorked}" />

有人知道如何让单元格模板绑定到它所连接的元素吗


提前感谢

一种方法是通过代码创建动态绑定表达式并生成datagrid列(xaml中的AutoGenerateColumns=“False”),apporx。下面给出的代码(未编译):


公共void AddColumns(字符串[]myHeaderList,列表myList)
{
对于(int i=0;i {
DataGridTemplateColumn gridCol=新建DataGridTemplateColumn();
gridCol.Header=myHeaderList[i];
gridCol.CellTemplate=
(数据模板)this.Resources[“TimesheetEntryDetailCellTemplate”];
gridCol.Binding=新绑定(“[”+i+“].hoursweed”);
_dataGrid.Columns.Add(gridCol);
}

}
列表myList=
_dataGrid.ItemsSource=myList


在XAML中,需要将AutoGenerateColumns设置为false:


  <TextBox Text="{Binding Source = TimesheetDetail[ColumnDisplayIndex].HoursWorked}" />