2017-01-06 5 views
0

Я хочу сделать колонтитула к моей DataGrid с помощью этого метода: How do I add a footer row in a WPF datagrid?WPF Datagrid Footer по коду За => Колонка Доступ Binding

Но, мне нужно сделать это с помощью кода позади, и это не работает , Я думаю, это потому, что привязка сетки не может найти столбец.

 private DataGridColumn dgInsertCol(ref int idx, DataGridColumn dgc, tblEtatRecapColonne pCol, string pBinding = "") { 
     var dhHeadName = $"dgHead{pCol.Id}"; 
     dgc.SetValue(NameProperty, dhHeadName); 
     dgc.HeaderTemplate = GetDtHeader(pCol, pBinding); 
     dgc.Width = new DataGridLength(1.0, (ckbSize.IsChecked.Value) ? DataGridLengthUnitType.Star : DataGridLengthUnitType.SizeToCells); 
     dgMain.Columns.Insert(idx++, dgc); 
     // Faire le footer associé 
     var t = new TextBlock() { Margin = new Thickness(5, 0, 0, 0), Text = pBinding, Background = new SolidColorBrush(Color.FromRgb(50, 100, 150)) }; 
     var g = new Grid() { MinWidth = 10 }; 
     g.SetBinding(Grid.WidthProperty, new Binding("ActualWidth") { ElementName = dhHeadName, Path=new PropertyPath("ActualWidth", null) }); // DataGridColumn 
     g.Children.Add(t); 
     pnlDgFooter.Children.Add(g); 
     return dgc; 
    } 

      <DataGrid Grid.Row="1" x:Name="dgMain" AutoGenerateColumns="False" SelectionUnit="FullRow" LoadingRow="dgMain_LoadingRow" MouseDown="dgMain_MouseDown" Sorting="dgMain_Sorting" 
       CanUserReorderColumns="False" CanUserResizeColumns="True" CanUserResizeRows="False" CanUserSortColumns="True" CanUserAddRows="False" 
       Style="{StaticResource dg}" RowStyle="{StaticResource dgRow}" CellStyle="{StaticResource dgCell}" ColumnHeaderStyle="{StaticResource dgColHeader}" RowHeaderStyle="{StaticResource dgRowHeader}" 
       ItemsSource="{Binding NotifyOnSourceUpdated=True, Source={StaticResource cvsElmts}}" HorizontalAlignment="Left"> 
      <!--DataGrid.DataContext><Binding Source="{StaticResource tblUsers}"/></DataGrid.DataContext--> 
      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="SelectionChanged"> 
        <mvvm:EventToCommand Command="{Binding SendCommand, Mode=OneWay}" CommandParameter="{Binding SelectedItem, ElementName=dgMain}" PassEventArgsToCommand="False"/> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 
      <DataGrid.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.ContainerStyle> 
         <Style TargetType="{x:Type GroupItem}"> 
          <Setter Property="Margin" Value="0,0,0,5"/> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="{x:Type GroupItem}"> 
             <Expander IsExpanded="True" BorderThickness="1,1,1,5"> 
              <Expander.Header> 
               <DockPanel> 
                <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" Margin="5,0,0,0" Width="100"/> 
                <TextBlock FontWeight="Bold" Text="{Binding Path=ItemCount}"/> 
               </DockPanel> 
              </Expander.Header> 
              <Expander.Content> 
               <ItemsPresenter /> 
              </Expander.Content> 
             </Expander> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </GroupStyle.ContainerStyle> 
       </GroupStyle> 
       <!-- Style for groups under the top level. --> 
       <GroupStyle> 
        <GroupStyle.HeaderTemplate> 
         <DataTemplate> 
          <DockPanel Background="LightBlue"> 
           <TextBlock Text="{Binding Path=Name}" Foreground="Blue" Margin="30,0,0,0" Width="100"/> 
           <TextBlock Text="{Binding Path=ItemCount}" Foreground="Blue"/> 
          </DockPanel> 
         </DataTemplate> 
        </GroupStyle.HeaderTemplate> 
       </GroupStyle> 
      </DataGrid.GroupStyle> 
      <DataGrid.Columns> 
       <StaticResource ResourceKey="rowBtnDetail"/> 
      </DataGrid.Columns> 
     </DataGrid> 
     <StackPanel Grid.Row="2" Name="pnlDgFooter" HorizontalAlignment="Left" Orientation="Horizontal" > 
     </StackPanel> 

ответ

1

Зачем использовать ElementName? Установите непосредственно Source переплетения. Кроме того, не установлено Path дважды, так что либо написать

g.SetBinding(Grid.WidthProperty, 
    new Binding 
    { 
     Source = dgc, 
     Path = new PropertyPath("ActualWidth") 
    }); 

или

g.SetBinding(Grid.WidthProperty, new Binding("ActualWidth") { Source = dgc }); 
+0

Отлично! Спасибо. – david

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