WPF - 自定义数据表示

时间:2011-02-22 20:33:27

标签: .net wpf

我希望使用WPF以下列形式显示数据:

图片:http://i.stack.imgur.com/54CkI.png

即 - 按月分组的数据。每个月的标题行,详细信息和摘要行。具有多个列的简单表格形式的详细信息。

此外,当我尝试使用CollectionViewSource.GroupDescriptions对数据进行分组时 - 它非常慢。

所以我打算在ViewModel中对数据进行分组,并将它们作为类的对象集合返回:

public class Group 
{ 
   string Month; 
   IEnumerable<GroupItem> Details; 
   string Summary; 
}

不必对列进行排序,但应该可以全局更改列的宽度 - 所有组。我觉得“游戏”会进入一种与colspan和rowspan相关的玩法。

在WPF中呈现此类数据的最佳方式是什么 - 使用哪些控件,如何定义模板。

2 个答案:

答案 0 :(得分:0)

我在Windows窗体应用程序中使用了DevExpress中的PivotGrid,它非常棒。我认为他们也为Silverlight和WPF做了PivotGrid控件,你可以查看他们的网站。

我不会尝试使用标准控件来模仿所有这些功能,与最实际和特别开发的组件相比,您最终会得到如此多的编码并且仍然是一个平庸的结果。

P.S。这不是垃圾邮件,如果你不想去DevExpress方向,那么无论如何还有很多其他供应商,我只是建议我所知道的以及我所知道的是好的和有效的。

答案 1 :(得分:0)

您可以使用ListView并创建ItemTemplet。

这是一个基本的骨架。您可能需要设置一些宽度,并可能添加一些边框以获得正确的结果。您还需要为ListView创建一个显示详细信息的ItemTemplate。

<ListView ItemsSource="{Binding TheData}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Month}" />
                        <StackPanel>
                            <ListView ItemsSource="{Binding Details}" />
                            <TextBlock Text="{Binding Summary}" />
                        </StackPanel>
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>