Reputation: 998
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
Reputation: 6316
You need to add Columns tag to the grid
<DataGrid..>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
</DataGridColumns>
...
Upvotes: 2
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
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