2

我目前的任务是为 WPF 应用程序构建一个类似电子表格的 GUI,我遇到了一些问题。本质上,我想按列绑定到数据网格,以便一列包含某一年的数据。因此,鉴于 2006 年是开始年,而 2009 年是结束年,我希望有 4 列,每列以列为基础显示给定年份的值。

这就是我现在在代码隐藏中的内容:

private Years m_YearsList;

    public Years YearsList
    {
        get { return m_YearsList; }
        set { m_YearsList = value; }
    }

    public MainWindow()
    {
        InitializeComponent();

        YearsList = LoadData();

        TestGrid.DataContext = YearsList;
    }

    public Years LoadData()
    {
        var personer = new Years{
            new Year
                {
                    Taxed = new Taxed {TaxedField = 10},
                    NumBuildings = new BuildingsCollection {NumBuildings = 25},
                    Area = new Area{AreaField = "NoWhere"},
                    DisplayName = "Person1"
                },
            new Year
                {
                    Taxed = new Taxed{TaxedField = 2},
                    NumBuildings = new BuildingsCollection{NumBuildings = 8},
                    Area = new Area{AreaField = "SomeWhere"},
                    DisplayName = "Person2"
                },
                new Year
                {
                    Taxed = new Taxed{TaxedField = 18},
                    NumBuildings = new BuildingsCollection{NumBuildings = 20},
                    Area = new Area{AreaField = "UpThere"},
                    DisplayName = "Person3"
                }
        };

        return personer;
    }
}

Year 对象只是简单地包装了两个 int 和一个字符串。Years 对象是我绝望的镜头,看起来像这样:

public class Years : List<Year>{}

我的 XAML:

<DataGrid x:Name="TestGrid" ItemsSource="{Binding}" CanUserAddRows="False" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=NumBuildings}" />
        <DataGridTextColumn Binding="{Binding Path=Taxed}" />
        <DataGridTextColumn Binding="{Binding Path=Area}" />
    </DataGrid.Columns>
</DataGrid>

此代码生成:

结果视图

如您所见,Year 对象每列绑定到一个属性,而我基本上希望将它们绑定到一个对象,所有属性都在一个列中。不幸的是,我的 WPF 技能在这里缺乏。:(

4

1 回答 1

0

我发现这篇文章讨论了创建数据表并将其转置(即将行换成列),然后将该对象绑定到数据网格。因此,编写一个从您的集合创建转置数据表并将此表绑定到数据网格的方法。

问题是这不会真正更新,所以如果你的数据应该由用户在数据网格中编辑,那么你就有问题了。

您可以直接更改数据源,也可以编辑数据网格的 ControlTemplate。

于 2012-05-21T10:30:52.340 回答