Yevgeniy
Yevgeniy

Reputation: 998

WPF GridView Column Binding issue

I have the following GridView control that works fine:

<DataGrid IsReadOnly="true"
          ItemsSource="{Binding CiList}"
          AutoGenerateColumns="True"
          SelectedItem="{Binding Path=CI}" />

If I set AutoGenerateColumns="False" and manually add a DataGridTextColumn, like so:

<DataGrid IsReadOnly="true"
          ItemsSource="{Binding CiList}"
          AutoGenerateColumns="False"
          AlternatingRowBackground="Gainsboro"
          AlternationCount="2"
          Height="150"
          SelectedItem="{Binding Path=CI}">
  <DataGridTextColumn Header="Name"
                      Binding="{Binding Path=Name}" />
</DataGrid>

I get an InvalidOperationException “Items collection must be empty before using ItemsSource.”

What am I doing incorrectly? Thanks!

EDIT: I'm using MVVM pattern, and the DataContext for the Window is my ViewModel, of which CiList is a property.

Upvotes: 1

Views: 498

Answers (3)

denis morozov
denis morozov

Reputation: 6316

You need to add Columns tag to the grid

<DataGrid..>
   <DataGrid.Columns>
      <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
   </DataGridColumns>
...

Upvotes: 2

Nitin Purohit
Nitin Purohit

Reputation: 18580

Put column in DataGrid.Columns like below:

<DataGrid IsReadOnly="true" ItemsSource="{Binding CiList}" AutoGenerateColumns="False" AlternatingRowBackground="Gainsboro"  AlternationCount="2" Height="150" SelectedItem="{Binding Path=CI}">
  <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
  </DataGrid.Columns>
</DataGrid>

Upvotes: 1

Bolu
Bolu

Reputation: 8786

you need to define your columns within DataGrid.Columns

<DataGrid IsReadOnly="true" ItemsSource="{Binding CiList}" AutoGenerateColumns="False" AlternatingRowBackground="Gainsboro"  AlternationCount="2" Height="150" SelectedItem="{Binding Path=CI}">
      <DataGrid.Columns>
                    <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
      </DataGrid.Columns>
</DataGrid>

Upvotes: 2

Related Questions