1

DataGrid型にバインドできますCollection<List>か?

DataGridaをaにバインドすることについていくつかの質問がありCollection<Collection>、それは私にとってもある程度うまくいきました。しかし、私は特にDataGrid<-Binding->を探していCollection<List>ます。


私が試したところ、は次のようなListオブジェクトとして表示されています。DataGrid

名前 -System.Collections.Generic.List'1
[System.Int32]

Bob2343000 + System.Collections.Generic.List'1 [System.Int32 ]



この場合のとはどうList違うのCollectionですか?

AListにはエントリの識別子がないため、リスト内のエントリを。内の列に自動的にグループ化することはできませんDataGrid

例:

Collection<List>
entry1には:List"Bob"、
23、43000が含まれ、entry2にはList: "Alice"、42、71000が含まれます。

を使用しDataTemplateList次の表示を取得できますか?
名前| 年齢| 給与
ボブ| 23 | 43000
アリス| 42 | 71000

Name、Age、Salaryの文字列はの一部ではないことに注意してくださいLists


私の計画

  1. ヘッダー行をにバインドして、ヘッダーList<String>の列名を取得しますDataGrid's
  2. 残りの行をにバインドしてCollection<List>、にデータを入力しますDataGrid

List<String>具体的には、これらの3つの文字列(Name、Age、Salary)をに入れて、ヘッダー行のみをバインドできるかどうか疑問に思っています。の残りの行は、DataGridコレクションにバインドできます。

これも可能ですか?


理想的には、 Infragistics を使用したいのXamDataGridですが、どのような解決策もDataGrid出発点として適しています。


編集

使ってみませんCollection<Employee>か?の列のサブセットのみを表示したいと思いますDataGrid

2種類の列を表示する画面が約5つありEmployeeますEmployeeDetails。これらのタイプにはそれぞれ約100の異なるプロパティがあり、各画面に列として約20のプロパティを表示することにのみ関心があります。したがって、これらの20個のプロパティのみを含むforeach /オブジェクトを作成しListています。EmployeeEmployeeDetails

サブセットは、実行時にいくつかの構成ファイルを読み取ることによって定義されます。したがって、表示する必要があるものを静的に定義することはできません。

4

2 に答える 2

2

バインディングコンバーターを使用して、リストのメンバーを抽出できます。

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    if (value is List<string> && parameter is int)
    {
        return ((List<string>)value)[(int)parameter];
    }

    return null;
}

...しかし正直なところ、私はあなたが何を達成しようとしているのか理解していません。文字列のリストはオブジェクトのプロパティを表します。whereisを使用しないのはなぜCollection<Employee>ですかEmployee

public class Employee : INotifyPropertyChanged
{
    public string Bob
    {
        ...
    }

    public int Age
    {
        ...
    }

    public double Salary
    {
        ...
    }
}

強く型付けされ、はるかに読みやすく、はるかに保守しやすい。


編集:

編集内容を読んだ後:絶対にを使用しないでくださいList<string>。XamDataGridに各フィールドの列を自動的に生成するように依頼しないでください。列を非表示にする方法についての例もいくつかあります。


編集:

を公​​開するよりも、プロパティを公開し、コードを背後に書き込む方が、MVVMにはるかに適しています。Collection<Employee>Collection<List<string>>

XamDataGridコントロールの制限は、MVVMパターンのビュー部分に純粋に関連していることを忘れないでください。そのため、ViewModelロジックを変更しないでください

また、役立つ可能性のある関連する質問があります:XamDataGrid列の可視性がMVVMを使用して機能していません

于 2012-08-16T16:48:10.067 に答える
1

これは正しく聞こえません。コレクション内に表示するアイテムは、プロパティを持つ単なるオブジェクトです。これらのプロパティを持つオブジェクトのコレクションを持っていないのはなぜですか?

2番目のリストを繰り返すには、データソースとしてそのリストにバインドされたバインドされた行内に別のItemsControlが必要になります。それ以外の場合は、System.Collections.Generic.List'1 [System.Int32]バインディング値を受け取るだけです。これは、繰り返されているものの現在のレベルであるためです。

汎用性を維持したい場合は、コレクションにバインドして、オブジェクトがそのプロパティを定義できるようにし、Datagridで、表示する必要があると思われるプロパティにのみバインドすることもできます(オブジェクトがそれをサポートしているかどうかは関係ありません)。

于 2012-08-16T16:35:46.007 に答える