码迷,mamicode.com
首页 > Windows程序 > 详细

WPF DataGrid的可见性

时间:2020-01-12 15:26:08      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:code   div   没有   set   取数   local   headers   oge   object   

使用WPF的DataGrid的时候 会自定义列或者是绑定某些属性。

但是通常有些问题,获取不到或者没有数据。

因为Column是属性所以并不在逻辑树和视觉树中。

 

此时可以通过代理类来做中间部分。

将某些属性放置到或者绑定到这个类,DataGird的列在通过绑定就可以获取数据。

例如自定义HeaderTemplate,里面的数据则是不可以获取DataContext。通过此方法就可以了(如果可以尽可能修改HeaderStyle,Style中的TagetType设置为DataGridColumnHeader,并修改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>

 

另外一种方式是继承Freezable

这样可以写依赖属性。再通过绑定就可以获取到

 

 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>

WPF DataGrid的可见性

标签:code   div   没有   set   取数   local   headers   oge   object   

原文地址:https://www.cnblogs.com/T-ARF/p/12182465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!