public void AddColumn(string lcid) { Language language = DataModel.GetLanguageByLcid(lcid); if (language != null) { dataGrid.Columns.Add(new DataGridTextColumn { Header = language.DisplayName, Binding = new Binding(lcid) }); language.IsSelected = true; } }
/// <summary> /// Initializes the datagrid columns and sets the ItemsSource to the default collection. /// </summary> private void InitializeDataGrid() { List <string> cultures = DataModel.CultureNames; /// Create some setters and triggers for the /// styles of the read-only columns. /// Trigger iIsSelectedTrigger = new Trigger() { Property = DataGridTextColumn.IsReadOnlyProperty, Value = true }; var foregroundSetter = new Setter(DataGridCell.ForegroundProperty, new SolidColorBrush(Colors.Black)); iIsSelectedTrigger.Setters.Add(foregroundSetter); var backgroundSetter = new Setter(DataGridCell.BackgroundProperty, new SolidColorBrush(Colors.LightGray)); /// The first column is for the metadata container object. /// var objectColumnStyle = new Style(typeof(DataGridCell)); objectColumnStyle.Setters.Add(backgroundSetter); objectColumnStyle.Setters.Add(foregroundSetter); objectColumnStyle.Triggers.Add(iIsSelectedTrigger); dataGrid.Columns.Add(new DataGridTextColumn { Header = FindResource("TabularObjectColumnHeader").ToString(), Binding = new Binding(DataModel.ContainerColumnHeader), IsReadOnly = true, CellStyle = objectColumnStyle }); /// The second column is for the default culture of the data model, /// which is always the first language in the list of data model cultures. /// var defaultLangColumnStyle = new Style(typeof(DataGridCell)); defaultLangColumnStyle.Setters.Add(foregroundSetter); defaultLangColumnStyle.Triggers.Add(iIsSelectedTrigger); /// Add a tooltip to flag that the default culture is readonly. /// var objectHeaderStyle = new Style(typeof(DataGridColumnHeader)); objectHeaderStyle.Setters.Add(new Setter(ToolTipService.ToolTipProperty, FindResource("DefaultCultureColumnHeaderToolTip").ToString())); Language defaultLang = DataModel.GetLanguageByLcid(cultures[0]); dataGrid.Columns.Add(new DataGridTextColumn { Header = $"{defaultLang.DisplayName}*", HeaderStyle = objectHeaderStyle, Binding = new Binding(cultures[0]), IsReadOnly = true, CellStyle = defaultLangColumnStyle }); DataModel.SetLanguageFlags(cultures[0], true, true); /// Add the remaining languages that already exist in the data model /// and mark them as selected in the list of supported languages. /// for (int i = 1; i < cultures.Count; i++) { AddColumn(cultures[i]); } /// And set Captions as the default content of the datagrid. dataGrid.ItemsSource = DataModel.Captions; }