2

私は現在、WPFアプリケーション用のスプレッドシートのようなGUIを構築する任務を負っていますが、いくつかの問題が発生しました。基本的に、1つの列に特定の年のデータが含まれるように、列ごとにデータグリッドにバインドしたいと思います。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オブジェクトは、2つのintと1つの文字列を単純にラップします。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オブジェクトは列ごとに1つのプロパティにバインドされていますが、基本的には、すべてのプロパティが1つの列にある1つのオブジェクトにバインドされています。残念ながら、私のWPFスキルはここに欠けています。:(

4

1 に答える 1

0

この記事では、データテーブルを作成して転置し(つまり、行を列に交換して)、そのオブジェクトをデータグリッドにバインドする方法について説明しています。したがって、コレクションから転置されたデータテーブルを作成し、このテーブルをデータグリッドにバインドするメソッドを記述します。

問題は、これが実際には更新されないことです。したがって、データグリッド内のユーザーがデータを編集することになっている場合は、問題が発生します。

データソースを直接変更することも、データグリッドのControlTemplateを編集する必要がある場合もあります。

于 2012-05-21T10:30:52.340 に答える