Проблема источника элементов WPF DataGrid

Пожалуйста, дайте знать, что я относительно новичок в WPF. Я создаю новый ObservableCollection с типом моего простого класса данных и назначаю его свойству ItemsSource моего DataGrid. Прежде чем я перейду к своей проблеме, вот код:

XAML:

<my:DataGrid SelectionMode="Single" SelectionUnit="Cell" Height="113" HorizontalAlignment="Left" Margin="11,22,0,0" Name="addressGrid" VerticalAlignment="Top" Width="213" Background="#FFE2E2E2" AlternatingRowBackground="#FFA4CFF2" BorderBrush="#FF7C7C7C" HorizontalGridLinesBrush="White" PreviewKeyDown="addressGrid_PreviewKeyDown" CellEditEnding="addressGrid_CellEditEnding" BeginningEdit="addressGrid_BeginningEdit" PreparingCellForEdit="addressGrid_PreparingCellForEdit">
        <my:DataGrid.Columns>
        <my:DataGridTextColumn Header="Name" Width="*" Binding="{Binding Path=Name}"></my:DataGridTextColumn>
        <my:DataGridTextColumn Header="Value" Width="3*" Binding="{Binding Path=Value}"></my:DataGridTextColumn>
        <my:DataGridTextColumn Header="Index" Visibility="Hidden" Binding="{Binding Path=Index}"></my:DataGridTextColumn>
        </my:DataGrid.Columns>
</my:DataGrid>

Класс данных:

public class PropertyFields
{
    public string Name { get; set; }
    public object Value { get; set; }
    public int Index { get; set; }
}

Население:

ObservableCollection<PropertyFields> propertyList = new ObservableCollection<PropertyFields>();
for (int i = 0; i < m_pFields.FieldCount - 1; ++i)
{
   propertyList.Add(new PropertyFields() {Name = m_pFields.Field[i].AliasName, Value = DisplayedValueForRow(i), Index = i});
}

// Set ItemSource to populate grid
addressGrid.ItemsSource = propertyList;

Подробнее о методе популяции:

Я создаю это решение с помощью инфраструктуры ArcGIS, поэтому некоторые вещи не являются «системными».

  • m_pFields — это объект интерфейса IFields, который позволяет мне хранить информацию о пространственном слое.

  • IFields имеет свойство FieldCount, которое возвращает количество полей в коллекции.

  • DisplayedValueForRow(i) вызывает другой метод объекта ArcGIS IPropertySet.GetProperty() и возвращает значение.


Проблема:

Все заполняется так, как должно быть, но по какой-то странной причине он повторно создает три столбца (имя, значение, индекс) снова ВВЕРХУ для заполнения столбцов, созданных в XAML - в свою очередь в итоге 2 набора одинаковых данных. Я обнаружил, что это странное поведение, поскольку я клянусь, что видел, как люди привязывались к своей сети таким образом раньше.

Что я делаю неправильно?

Редактировать

Благодаря комментарию ChrisO я узнал, что есть свойство AutoGenerateColumns, которое необходимо отключить. Ну, я чувствую себя каблуком. Спасибо!


person Logan B. Lehman    schedule 26.04.2013    source источник
comment
Это из памяти, но вам нужно установить AutoGenerateColumns=false в DataGrid?   -  person ChrisO    schedule 27.04.2013
comment
@ChrisO Если бы вы могли изменить это, чтобы ответить, я дам его вам. Спасибо, что сообщили мне об этой собственности!   -  person Logan B. Lehman    schedule 27.04.2013
comment
Рад, что это помогло. Я создал ответ, чтобы вы его приняли. Спасибо!   -  person ChrisO    schedule 27.04.2013


Ответы (2)


Просто установите для свойства AutoGenerateColumns значение false в файле DataGrid. Тогда он будет использовать только указанные вами столбцы.

person ChrisO    schedule 27.04.2013

Просто установите его AutoGenerateColumns на False. По умолчанию это True.

Если вы хотите показать все поля вашего класса. не устанавливайте столбцы в XAML.

Но если вы хотите отображать выборочные столбцы, установите для AutoGenerateColumns значение false и запишите отдельные столбцы в XAML.

person Nikhil Agrawal    schedule 27.04.2013