【问题标题】:How to add a DataGrid to a DataGridTemplateColumn.CellTemplate如何将 DataGrid 添加到 DataGridTemplateColumn.CellTemplate
【发布时间】:2012-10-07 06:14:25
【问题描述】:

我需要将DataGrid添加到DataGridTempateColumn,所以我这样做了,但是它不能正常工作,我不知道我是否真的可以将DataGrid添加到DataGridTempateColumn?

<datagrid>
....
<DataGridTemplateColumn.CellTemplate>
     <DataTemplate>
        <DataGrid HeadersVisibility="None" AutoGenerateColumns="False" CanUserAddRows="True"                    ItemsSource="{Binding ProjectCollection}">
                                <DataGridTextColumn Binding="{Binding Spec.Rev}" Width="*"></DataGridTextColumn>
                                <DataGridTextColumn  Binding="{Binding Spec}" Width="*"></DataGridTextColumn>

        </DataGrid>
     </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
</DataGrid>

编辑: 当 ProjectCollection 为空时,我们看不到 dataGrid,如图中的第 2 行所示!

【问题讨论】:

    标签: wpf wpfdatagrid datatemplate


    【解决方案1】:

    我怀疑这会奏效。您将获得 InvalidOperationException - Items collection must be empty before using ItemsSource.,因为您正在为内部 Grid 设置 ItemsSource,同时您正在向 DataGrid 添加子项。

    像这样将列添加到 dataGrid 的 Columns DP 中,它将按您的需要工作 -

    <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
            <DataGrid HeadersVisibility="None" AutoGenerateColumns="False"
                     CanUserAddRows="True" ItemsSource="{Binding ProjectCollection}">
               <DataGrid.Columns>
                   <DataGridTextColumn Binding="{Binding Spec.Rev}" Width="*"/>
                   <DataGridTextColumn  Binding="{Binding Spec}" Width="*"/>
               </DataGrid.Columns>
            </DataGrid>
         </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    

    【讨论】:

      【解决方案2】:

      您可以使用 ListView 而不是使用 DataGrid 和视图 GridView

      <DataGridTemplateColumn Header="Complex Data">
                      <DataGridTemplateColumn.CellTemplate>
                          <DataTemplate>                    
                              <ListView ItemsSource="{Binding ProjectCollection}">
                                  <ListView.View>
                                      <GridView>
                                          <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
                                          <GridViewColumn Header="Date" DisplayMemberBinding="{Binding Date}" />
                                      </GridView>
                                  </ListView.View>
                              </ListView>
                          </DataTemplate>
                      </DataGridTemplateColumn.CellTemplate>
                  </DataGridTemplateColumn>
      

      【讨论】:

      • 我已经这样做了,但结果相同。当我将它设置为 HeadersVisibility="None" 时,我只看到一个只读列!
      • 显示插入 ItemsSource 的内容。
      • kmatyaszek : ProjectCollection = new ObservableCollection&lt;Project&gt;(a List of Projects);
      • @kmatyaszek :是的,谢谢,但是还有一个问题,当 ProjectCollection 为空时,它显示一个空行,我附上了一张图片,你可以看到我的意思
      • @raha- 这就是它的工作原理。包含 0 个项目的 DataGrid 将显示为空白。在那种情况下你想要什么?
      猜你喜欢
      • 2019-01-26
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 2011-02-03
      • 1970-01-01
      相关资源
      最近更新 更多