2013-12-05 6 views
1

Я пытаюсь создать эффект группировки в datagrid без необходимости использовать группировку, доступную с datagrid, поскольку это не позволяет мне показывать значения столбцов в строках заголовка, если я не " подделать его "и сделать все столбцы, которые я сделал ранее. У меня есть рабочий пример, где я могу получить datagrid, чтобы заполнить данные в другой строке datagrid rowdetailstemplate. Мой главный вопрос заключается в том, что я заметил, что внутренний datagrid не учитывает некоторые мои свойства, в частности FrozenColumnCount, который, когда я перемещаю scrollviewer внешнего datagrid, перемещается во внутренний datagrid, но не имеет замороженных столбцов.Datagrid внутри Datagrid RowDetailsTemplate

Вот код, и мы надеемся, что будет лучше продемонстрировать, что я делаю:

<DataGrid ItemsSource="{Binding DisplayRows}" AutoGenerateColumns="False" Grid.Row="1" FrozenColumnCount="1" > 
     <DataGrid.RowDetailsTemplate > 
      <DataTemplate> 
       <DataGrid AutoGenerateColumns="False" FrozenColumnCount="1" ItemsSource="{Binding DataContext.DisplayRows, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"> 
        <DataGrid.Columns> 
         <DataGridTextColumn Binding="{Binding Timestamp, StringFormat=\{0:MMM dd\, yyyy HH:mm\}}" Header="Timestamp" Width="113" /> 
         <DataGridTextColumn Header="HE1" Binding="{Binding Hours[0], StringFormat=\{0:#\,##0\}}" Width="50"> 
          <DataGridTextColumn.CellStyle> 
           <Style TargetType="{x:Type DataGridCell}"> 
            <Style.Setters> 
             <Setter Property="Background" Value="{Binding Backgrounds[0]}" /> 
             <Setter Property="TextBlock.TextAlignment" Value="Right" /> 
             <Setter Property="HorizontalAlignment" Value="Stretch" /> 
            </Style.Setters> 
           </Style> 
          </DataGridTextColumn.CellStyle> 
         </DataGridTextColumn> 
        </DataGrid.Columns> 
       </DataGrid> 
      </DataTemplate> 
     </DataGrid.RowDetailsTemplate> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Timestamp, StringFormat=\{0:MMM dd\, yyyy HH:mm\}}" Header="Timestamp" Width="120" /> 
      <DataGridTextColumn Header="HE1" Binding="{Binding Hours[0], StringFormat=\{0:#\,##0\}}" Width="50"> 
       <DataGridTextColumn.CellStyle> 
        <Style TargetType="{x:Type DataGridCell}"> 
         <Style.Setters> 
          <Setter Property="Background" Value="{Binding Backgrounds[0]}" /> 
          <Setter Property="TextBlock.TextAlignment" Value="Right" /> 
          <Setter Property="HorizontalAlignment" Value="Stretch" /> 
         </Style.Setters> 
        </Style> 
       </DataGridTextColumn.CellStyle> 
      </DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

Мой фактический проект имеет гораздо больше строк, но это упрощенная XML. Вот несколько фотографий, чтобы показать проблему, о которой я говорю.

Initial Load looks good

After scroll looks wrong

Надеюсь кто-то может помочь мне с этим. Спасибо за помощь.

+0

Я думаю, замороженные столбцы будут замораживать только при взаимодействии с ScrollViewer в DataGrid, которая принадлежит столбец. Вам нужно будет возиться с синхронизацией прокрутки-прокрутки datagrid, если вы хотите этого эффекта. – Shoe

+0

Да, это похоже на случай. Я заметил, что если я даю максимальные размеры моему внутреннему datagrid, замороженный столбец определенно работает, но потом имеет собственный свиток. – Kohins

ответ

1

Я думаю, что лучший способ для иерархии DataGrid использовать подход этой статьи: http://blogs.perpetuumsoft.com/silverlight/how-to-turn-silverlight-datagrid-to-treegrid-in-15-minutes/

+0

Ничего себе, что работает намного лучше. Знаете ли вы много о подходе, описанном в этой статье. У меня все работает отлично, за исключением моего шаблона mvvm. Я могу только представить, что ItemSource datagrid из кода позади, а не непосредственно в xaml, который я бы хотел. – Kohins

Смежные вопросы