2011-03-31 69 views
0

我正在創建一個Timesheet應用程序,其中有員工列表以及要分配時間的Codings列表。WPF .Net 4.0 MVVM將DataGrid單元格綁定到數組元素對象

我創建了一個二維碼和我有網格看蠻好EXCEPT的時間

網格中的數據錄入看起來像

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()); 
    } 
} 

數據網格的ItemsSource是TimesheetArray。

我遇到的問題是,當我輸入數據Employee1作業1 DataGrid的樣子

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

,我想它看起來像

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}" /> 

有誰知道我怎樣才能得到的細胞模板綁定到它鉤住???元素

由於提前

回答

0

一種方式是通過代碼來創建動態結合表達併產生的數據網格列(的AutoGenerateColumns在XAML =「假」),apporx。代碼如下(未編譯):

public void AddColumns(string[] myHeaderList, List<TimesheetDetail[]> myList)
{
    for (int i = 0; i < myHeaderList.Length; i++)
    {
        DataGridTemplateColumn gridCol = new DataGridTemplateColumn();
        gridCol.Header = myHeaderList[i];
        gridCol.CellTemplate =
(DataTemplate)this.Resources["TimesheetEntryDetailCellTemplate"];
        gridCol.Binding = new Binding("[" + i + "].HoursWorked");
        _dataGrid.Columns.Add(gridCol);
    }

}
List<TimesheetDetail[]> myList=...;
_dataGrid.ItemsSource = myList;


In XAML you need to set AutoGenerateColumns to false:
< DataGrid Name="_dataGrid" AutoGenerateColumns="False" ...>