WPF DataGrid的可见性

导读:本篇文章讲解 WPF DataGrid的可见性,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

使用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>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/12611.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!