WPF GridView列绑定问题

时间:2013-10-04 15:25:21

标签: c# wpf xaml data-binding

我有以下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集合必须为空。”

我做错了什么?谢谢!

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

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

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

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

答案 2 :(得分: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>