Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF Datagrid页脚(按代码隐藏)=>;通过绑定访问列_C#_Wpf_Binding_Datagrid - Fatal编程技术网

C# WPF Datagrid页脚(按代码隐藏)=>;通过绑定访问列

C# WPF Datagrid页脚(按代码隐藏)=>;通过绑定访问列,c#,wpf,binding,datagrid,C#,Wpf,Binding,Datagrid,我想使用以下方法为我的DataGrid创建一个页脚: 但是,我需要通过代码隐藏来实现这一点,这是行不通的。 我想这是因为网格的绑定找不到列 private DataGridColumn dgInsertCol(ref int idx, DataGridColumn dgc, tblEtatRecapColonne pCol, string pBinding = "") { var dhHeadName = $"dgHead{pCol.Id}";

我想使用以下方法为我的DataGrid创建一个页脚:

但是,我需要通过代码隐藏来实现这一点,这是行不通的。 我想这是因为网格的绑定找不到列

        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>
private DataGridColumn dginsercoll(ref int idx,DataGridColumn dgc,tbletatrecapcollone pCol,string pBinding=“”){
var dhHeadName=$“dgHead{pCol.Id}”;
dgc.SetValue(NameProperty,dhHeadName);
dgc.HeaderTemplate=GetDtHeader(pCol,PBBinding);
dgc.Width=新的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 solidcolorbush(Color.FromRgb(50,100,150));
var g=new Grid(){MinWidth=10};
g、 SetBinding(Grid.WidthProperty,新绑定(“ActualWidth”){ElementName=dhHeadName,Path=new PropertyPath(“ActualWidth”,null)});//DataGridColumn
g、 添加(t);
pnlDgFooter.Children.Add(g);
返回dgc;
}

为什么要使用
ElementName
?直接设置绑定的
。另外,不要设置路径两次,因此

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


伟大的谢谢
g.SetBinding(Grid.WidthProperty, new Binding("ActualWidth") { Source = dgc });