3

設計時に設定された列数を持たない XamDataGrid をサポートできるようにする必要があります。たとえば、アプリが実行され、サーバーからデータが取得され、オブジェクトが作成されます。サーバーからの応答によっては、アプリを実行するたびにオブジェクトの数が異なる場合があります。

これが私の言いたいことの例です。いくつかのサービスを呼び出して、いくつかの情報を含む xml 応答を取得したとしましょう。その応答を多数のオブジェクトにデシリアライズします。これは、呼び出しが行われるたびに異なる可能性があります。

各オブジェクトに Label と Value の 2 つのプロパティがあるとします。グリッドに、Label の値と Value の値が一致するラベルの付いた列を表示したいと思います。したがって、obj1 と obj2 の 2 つのオブジェクトがある場合、次のようになります。

obj1.Label = "Parts"
obj1.Value = "17"

obj2.Label = "Parts"
obj2.Value = "12"

次のような 2 行のグリッドが必要です。

部品

17

12

データ ソースをグリッドにバインドすると、グリッドは自動的にオブジェクトのプロパティを使用して列を作成するので、Label と Value の列が表示されます。

ラベル値

パーツ 17

パーツ 12

xaml だけでは目的を達成できないと想定しています。誰かが私が探しているものの例を持っていますか? プログラムで実行時にすべての列を作成するのは私次第ですか?

4

3 に答える 3

1
 <Grid>
    <DataGrid Name="dgTest" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=ItemsSource[0].Label}" />
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Value}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

そしてコード:

public partial class Window12 : Window
{
    public Window12()
    {
        InitializeComponent();

        List<MyClass> l = new List<MyClass>();

        l.Add(new MyClass
        {
            Label = "Parts",
            Value = "17"
        });

        l.Add(new MyClass
        {
            Label = "Parts",
            Value = "12"
        });

        dgTest.ItemsSource = l;
    }
}

public class MyClass
{
    public string Label { get; set; }
    public string Value { get; set; }
}
于 2011-04-26T07:18:55.960 に答える
0

Iverzin のソリューションは、XamDataGrid で動作します。フィールドを自動生成する機能があるため、設計時に指定する必要はありません。

于 2011-05-09T14:45:08.983 に答える