Как привязать массив, List<> или ObservableCollection<> к заголовкам строки или столбца в DataGrid'е?
Описала массив типа string для заполнения им заголовков столбцов и еще один массив для заполнения заголовков строк в DataGrid, однако не могу понять, как все же отобразить данные.
Создала так же ViewModel для страницы и привязала DataContext
public class StudentPageViewModel : INotifyPropertyChanged
{
private int[] marksCollection;
public int[] MarksCollection
{
get => marksCollection;
set
{
marksCollection = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MarksCollection)));
}
}
private string[] gradesRowHeader;
public string[] GradesRowHeader
{
get => gradesRowHeader;
set
{
gradesRowHeader = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(GradesRowHeader)));
}
}
private string[] gradesColumnHeader;
public string[] GradesColumnHeader
{
get => gradesColumnHeader;
set
{
gradesColumnHeader = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(GradesColumnHeader)));
}
}
public StudentPageViewModel()
{
var SubjectsTitle = Observable1.electronic_DiaryEntities.Grades.Where(it => it.ID_Student == Observable1.UserID).Select(it => it.Subjects.Title).Distinct().ToArray();
var MarksDate = Observable1.electronic_DiaryEntities.Grades.Where(it => it.ID_Student == Observable1.UserID).Select(it => it.Date.ToString()).Distinct().ToArray();
GradesColumnHeader = MarksDate;
GradesRowHeader = SubjectsTitle;
}
}
код страницы StudentsPage
public partial class StudentPage : Page
{
public StudentPage()
{
InitializeComponent();
DataContext = new StudentPageViewModel();
}
}
код XAML с DataGrid'ом
<TabItem Style="{StaticResource MaterialDesignNavigationRailTabItem}" Width="125" Height="25" Header="Успеваемость">
<DataGrid ItemsSource="{Binding MarksCollection}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<tk:DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type tk:DataGrid}}, Path=DataContext.GradesColumnHeader}"/>
</DataTemplate>
</tk:DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" Width="200" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<tk:DataGrid.RowHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type tk:DataGridRow}}, Path=DataContext.GradesRowHeader}"></TextBlock>
</DataTemplate>
</tk:DataGrid.RowHeaderTemplate>
</DataGrid>
</TabItem>
