WPF .Net 4.0 MVVM Привязка ячеек DataGrid к объекту элемента массива - PullRequest
0 голосов
/ 31 марта 2011

Я создаю приложение расписания, в котором есть список сотрудников вместе со списком кодировок, которым нужно назначить время.

Я создал 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());
    }
}

Источником данных массива элементов является TimesheetArray.

Проблема возникает при вводе данных для Employee1 Job1сетка данных выглядит как

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

Кто-нибудь знает, как я могу получить шаблон ячейки для привязки к элементу, к которому он подключен ???

Заранее спасибо

1 Ответ

0 голосов
/ 17 августа 2011

Один из способов - создать выражение динамического связывания с помощью кода и создать столбцы таблицы данных (AutoGenerateColumns = "False" в xaml), ок. приведенный ниже код (не скомпилирован):

public void AddColumns(string[] myHeaderList, List<TimesheetDetail[]> myList) <br> {<br> for (int i = 0; i < myHeaderList.Length; i++)<br> {<br> DataGridTemplateColumn gridCol = new DataGridTemplateColumn();<br> gridCol.Header = myHeaderList[i];<br> gridCol.CellTemplate = <br>(DataTemplate)this.Resources["TimesheetEntryDetailCellTemplate"];<br> gridCol.Binding = new Binding("[" + i + "].HoursWorked");<br> _dataGrid.Columns.Add(gridCol);<br> }<br> <br> }<br> List<TimesheetDetail[]> myList=...;<br> _dataGrid.ItemsSource = myList;<br> <br> <br> In XAML you need to set AutoGenerateColumns to false:<br> < DataGrid Name="_dataGrid" AutoGenerateColumns="False" ...> <br> <br>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...