WPF行列对换的横向DataGrid

我们都知道,DataGrid控件的行和列是固定了的,在绑定对象的时候,一个对象绑定一行,通多列名来实现数据绑定。那如果想要一个对象绑定一列怎么办呢,如何让DataGrid控件实现行固定,列不断增加?其实DataGrid控件实际上是仅支持一个维度的集合,为啥DataGrid有行和列? DataGrid的可视树中是根本没有所谓列的概念的,只有行和单元格的概念。其实一个维度嵌套在另一个维度中,就能够形成二维的集合结构,但是对于DataGrid来说,对于它能够直接操作的还是第一维的DataGridRow,所以这也是直观来讲,DataGrid仅支持一个对象绑定一行,因为它只是一个竖直方向的集合绑定。

这里有没有实现办法呢,有的,这里不推荐通过行列变换的方式,这会显著降低性能,而且有关行列的事件机制,也会混乱导致使用起来,要解决更麻烦的事件处理混乱问题。这里可以变换一个思路,通过横向的ListView来实现,ListView里面的item为GridView,这样,展现出来的也是DataGrid,也就是每一项为列,列里面再由GridView构成行。好了,代码如下:

    <ListView x:Name="recordList" Height="400" Width="600" Canvas.Left="104" Canvas.Top="80" ItemsSource="{Binding .}">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"></StackPanel>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Border BorderBrush="#FF9376E1" BorderThickness="1">
                    <Grid Width="50">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="100"/>
                            <RowDefinition Height="100"/>
                            <RowDefinition Height="100"/>
                        </Grid.RowDefinitions>
                        <TextBlock Text="{Binding Path=Name}" TextAlignment="Center" VerticalAlignment="Center" Grid.Row="0"></TextBlock>
                        <TextBlock Text="{Binding Path=Level}" VerticalAlignment="Center" TextAlignment="Center" Grid.Row="2"></TextBlock>
                        <TextBlock Text="{Binding Path=Remark}" VerticalAlignment="Center" TextAlignment="Center" Grid.Row="3"></TextBlock>
                    </Grid>
                </Border>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

效果如图:

不过这样依旧不够完美,还缺少点东西,例如没有listview的拖动改变顺序,重新排序等等特性。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值