private void CreateRaceColumns() { int challengeIndex = 0; foreach (var challengeStanding in _allChallengeStandings.ChallengeStandings) { if (!_dataView.CurrentSeason.ContainsChallenge(challengeStanding.Challenge.Id)) { continue; } var column = new DataGridTemplateColumn { Header = UiUtils.GetTrackImage(challengeStanding.Challenge), Width = 96, }; var dataTemplate = new DataTemplate(); var gridFactory = new FrameworkElementFactory(typeof(Grid)); FrameworkElementFactory textBlockFactory = CreateTextBlock(challengeIndex); FrameworkElementFactory ellipseFactory = CreateEllipse(challengeIndex); gridFactory.AppendChild(ellipseFactory); gridFactory.AppendChild(textBlockFactory); dataTemplate.VisualTree = gridFactory; column.CellTemplate = dataTemplate; ChampionshipDataGrid.Columns.Add(column); challengeIndex++; } }