WPF DataGrid visibility

Use the WPF DataGrid time will custom columns or bind certain properties.

But usually some problems, get less or no data.

Column properties because it is not in the logic tree and the visual tree.

 

At this time, the intermediate portion can be done by the proxy class.

Or placed into certain attributes bind to this class, DataGird column data can be acquired by binding.

For example custom HeaderTemplate, which data is not acquired DataContext. By this method it ( if you can modify as HeaderStyle, TagetType set in Style is DataGridColumnHeader, and modify the Template )

 <FrameworkElement   Width="{Binding ElementName=DT1,Path=ActualWidth}" DataContext="{Binding ElementName=DG,Path=ItemsSource}" x:Name="f1"/>
        <DataGrid x:Name="DG"  AutoGenerateColumns="False" >
            <DataGrid.Columns>
                <DataGridTextColumn Header="课程名称"  Binding="{Binding SbjName}" Width="150">
                    <DataGridTextColumn.HeaderTemplate>
                        <DataTemplate>
                            <Grid >
                                <TextBlock Text="{Binding}"  HorizontalAlignment="Center" MinHeight="50"/>
                            </Grid>
                        </DataTemplate>
                    </DataGridTextColumn.HeaderTemplate>
                </DataGridTextColumn>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.HeaderTemplate>
                        <DataTemplate>
                            <Grid DataContext="{Binding Source={x:Reference f1}, Path=DataContext}">
                                
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.HeaderTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

 

Another way is inherited Freezable

This write dependency property. Then you can get to by binding

 

 class CD : Freezable
    {
       
            protected override Freezable CreateInstanceCore()
        {
            return new CD();
        }


        public object Data
        {
            get { return (object)GetValue(DataProperty); }
            set { SetValue(DataProperty, value); }
        }

        public static readonly DependencyProperty DataProperty =DependencyProperty.Register("Data", typeof(object), typeof(CD));

        }
<DataGrid x:Name="DG"  AutoGenerateColumns="False" >
            <DataGrid.Resources>
                <local:CD x:Key="c" x:Name="cd" Data="{Binding ElementName=DG,  Path=ItemsSource}"/>
            </DataGrid.Resources>
            <DataGrid.Columns>
                <DataGridTextColumn Header="课程名称"  Binding="{Binding SbjName}" Width="150">
                    <DataGridTextColumn.HeaderTemplate>
                        <DataTemplate>
                            <Grid >
                                <TextBlock Text="{Binding}"  HorizontalAlignment="Center" MinHeight="50"/>
                            </Grid>
                        </DataTemplate>
                    </DataGridTextColumn.HeaderTemplate>
                </DataGridTextColumn>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.HeaderTemplate>
                        <DataTemplate>
                            <Grid x:Name="G1" Tag="{Binding  Source={StaticResource c }, Path=Data}">
                                <TextBlock Text="{Binding  ElementName=G1,Path=Tag[1].SbjName}"/>
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.HeaderTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

Guess you like

Origin www.cnblogs.com/T-ARF/p/12182465.html