Привязка свойств к DataGridTextColumn.Header

Хотел попробовать привязать какое-нибудь свойство к заголовку столбца DataGrid'а. Перерыл пару источников, но все равно не получилось нормально отобразить данные... Пример кода ниже:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.Header>
        <DataTemplate>
            <TextBlock Text="{Binding DataContext.ColumnTitle, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
        </DataTemplate>
    </DataGridTemplateColumn.Header>
 </DataGridTemplateColumn>

Поправка: Данный код XAML работает при присваивании DataContext к тому классу, в котором у меня имеется нужное мне свойство. Но у меня на странице находится три вкладки TabItem, на которых есть ListView и нужный мне DataGrid, но в случае изменения DataContext данные в ListView исчезают. Как можно было бы обойти данную ситуацию?

ОБНОВЛЕНИЕ: У меня имеется страница, на которой размещен DataGrid для вывода успеваемости студентов. В состав DataGrid'а входит:

  1. название предмета, которое выводится в заголовок строки;
  2. дата, на которую ставится оценка и которая выводится в заголовок столбца (Возможно, можно будет опустить вывод дат в заголовки, но учитывать их при выводе оценок все равно нужно);
  3. оценка, которая размещена в ячейке на переплетении предмета и даты;

Примерно выглядеть это должно так (Без среднего балла): введите сюда описание изображения

На данный момент у меня имеется два массива для заполнения заголовков строк и столбцов, а также коллекция для заполнения оценок.

Код StudentPageViewModel:

public class StudentPageViewModel : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    private int?[] marksCollection = StudentPageModel.GetGrades();
    public int?[] MarksCollection
    {
        get => marksCollection;
        set
        {
            marksCollection = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MarksCollection)));
        }
    }
    private string[] gradesRowHeader = StudentPageModel.GetSubjectsTitles();
    public string[] GradesRowHeader
    {
        get => gradesRowHeader;
        set
        {
            gradesRowHeader = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(GradesRowHeader)));
        }
    }
    private string[] gradesColumnHeader = StudentPageModel.GetDates();
    public string[] GradesColumnHeader
    {
        get => gradesColumnHeader;
        set
        {
            gradesColumnHeader = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(GradesColumnHeader)));
        }
    }

   
    public StudentPageViewModel()
    { 
    }

Код xaml с DataGrid, в который должен производиться вывод данных:

 <DataGrid ItemsSource="{Binding MarksCollection}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False">
                <DataGrid.Columns>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.GradesColumnHeader[0]}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding}" Width="200" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
                <DataGrid.RowHeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=DataContext.GradesRowHeader[0]}"></TextBlock>
                    </DataTemplate>
                </DataGrid.RowHeaderTemplate>
            </DataGrid>

Код StudentModel:

 public class StudentPageModel
 {

    public static int?[] GetGrades()
    {
        using (DbStudents Entity = new DbStudents())
        {
            var Result = Entity.Grades.Where(it => it.StudentId == ClassForData.UserID).Select(it => it.Value).ToArray(); //Отбор данных для получения оценок
            return Result;
        }
    }
    public static string[] GetSubjectsTitles()
    {
        using (DbStudents Entity = new DbStudents())
        {
            var Result = Entity.Grades.Where(it => it.StudentId == ClassForData.UserID).Select(it => it.Subject.Title).Distinct().ToArray(); //Отбор данных для получения названий предметов
            return Result;
        }
    }
    public static string[] GetDates()
    {
        using (DbStudents Entity = new DbStudents())
        {
            var Result = Entity.Grades.Where(it => it.StudentId == ClassForData.UserID).Select(it => it.Date.ToString()).Distinct().ToArray(); //Отбор данных для получения дат оценок
            return Result;
        }
    }
 }


    

Конечный вывод: введите сюда описание изображения

При нумерации столбцов все выводится корректно, однако есть проблема дублирования оценок из первого столбца во все остальные + мне нужно выводить все столбцы динамически без указания нумерации в XAML.


Ответы (0 шт):