WPF DataGrid的可见性

2021-01-18 03:13

阅读:344

标签: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


评论


亲,登录后才可以留言!