Задайте имя заголовка столбца в XAML-WPF

Я хотел бы задать определяемый пользователем заголовок столбца в datagrid WPF, привязанный к базе данных.

для отображения ServerID, EventlogID, который я хотел бы отображать как Server, Event Log в заголовке столбца.

Я уже пробовал это...

 <DataGrid x:Name="dataGrid1" ItemsSource="{Binding}" AutoGenerateColumns="True" >
     <DataGrid.Columns>
        <DataGridTextColumn Header="Server" Width="Auto" IsReadOnly="True"  Binding="{Binding Path=ServerID}" />
            <DataGridTextColumn Header="Event Log" Width="Auto" IsReadOnly="True"  Binding="{Binding Path=EventLogID}" />
      </DataGrid.Columns>
   </DataGrid>

Это работает отлично, и он изменяет заголовок столбца, и также отображаются данные.

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

  |Server|Event Log|ServerID|EventLogID|

как преодолеть эту репликацию? Пожалуйста, помогите!

Ответ 1

Это потому, что вы оставили AutoGenerateColumns="True" удалить его, и больше не будет дублирования.

В настоящее время вы добавляете столбцы один раз, автоматически, а затем второй раз вручную!

Ответ 2

XAML: добавьте AutoGeneratingColumn="OnAutoGeneratingColumn" событие DataGrid:

<DataGrid x:Name="dataGrid1"  ItemsSource="{Binding YourItems}" AutoGenerateColumns="True" AutoGeneratingColumn="OnAutoGeneratingColumn">

Код позади: добавить обработчик событий следующим образом:

private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
  switch (e.Column.Header)
  {
    case "ServerID":
      e.Column.Header = "Server";
      break;
    case "EventID":
      e.Column.Header = "Event";
      break;   
    default:
      e.Cancel = true;
      break;
  }
}