1

我有以下工作正常的 GridView 控件:

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

如果我设置AutoGenerateColumns="False"并手动添加 DataGridTextColumn,如下所示:

<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>

我得到一个 InvalidOperationException “在使用 ItemsSource 之前,Items 集合必须为空。”</p>

我做错了什么?谢谢!

编辑:我正在使用 MVVM 模式,Window 的 DataContext 是我的 ViewModel,其中 CiList 是一个属性。

4

3 回答 3

2

您需要在其中定义列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>
于 2013-10-04T15:30:27.803 回答
2

您需要将 Columns 标签添加到网格

<DataGrid..>
   <DataGrid.Columns>
      <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
   </DataGridColumns>
...
于 2013-10-04T15:30:37.490 回答
1

将列放在 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>
于 2013-10-04T15:31:14.140 回答