Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定到WPF DataGrid-每列一个实体_C#_Wpf_Data Binding - Fatal编程技术网

C# 绑定到WPF DataGrid-每列一个实体

C# 绑定到WPF DataGrid-每列一个实体,c#,wpf,data-binding,C#,Wpf,Data Binding,我目前的任务是为WPF应用程序构建一个类似于电子表格的GUI,我遇到了一些问题。本质上,我希望以列为基础绑定到datagrid,以便一列包含特定年份的数据。因此,考虑到2006年是开始年,2009年是结束年,我希望有4列,每列显示给定年份的值 这就是我现在在代码背后的内容: private Years m_YearsList; public Years YearsList { get { return m_YearsList; } set { m

我目前的任务是为WPF应用程序构建一个类似于电子表格的GUI,我遇到了一些问题。本质上,我希望以列为基础绑定到datagrid,以便一列包含特定年份的数据。因此,考虑到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和一个字符串。“岁月”是我拍摄的一张绝望的照片,看起来像这样:

public class Years : List<Year>{}
public class Years:List{}
我的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技能:(

我找到了一个关于创建一个数据表并将其转置(即将行交换为列)然后将该对象绑定到datagrid的方法。因此,请编写一个方法,从集合中创建一个转置的数据表,并将该表绑定到datagrid

问题是这不会真正更新,所以如果您的数据应该由datagrid中的用户编辑,那么您就有点问题了

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

我找到了一个关于创建数据表和转换数据表(即,将行替换为列)的方法然后将该对象绑定到datagrid。因此,编写一个方法,从集合中创建一个转置的datatable,并将该表绑定到datagrid

问题是这不会真正更新,所以如果您的数据应该由datagrid中的用户编辑,那么您就有点问题了


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

谢谢!将签出文章,看看我是否有进展。如果有,我将更新。您提供的@JasonRidge链接是针对ASP.NET而不是WPFThanks的!将签出文章,看看我是否有进展。如果有,我将更新。您支持的链接vided@JasonRidge用于ASP.NET而不是WPF