2011-01-06 7 views
2

ファイルを解析してWPF DataGridにインポートするシステムで作業しています。ファイルはコレクション文字列[]に分割され、UIに表示するために私に渡されます。WPFでDataGridをバインドするためにString []をExpandoに変換する

この[string]のコレクションをWPF(.NET4)DataGridにバインドできるものに変換する最も簡単な方法は何ですか?別に

:私は残念ながらExpandoのような動的なオブジェクトが私のテストでWPF4ではまだ動作しないはExpando .....

+0

文字列[]文字列はpaですかファイルに...または? –

+0

その文字列[]にバインドするのは簡単です、問題は何ですか? –

答えて

3

を使用したいと思います。しかし、利用可能な他の試行錯誤の方法があります。このようなXAMLと一緒

var rawData = new string[][] 
{ 
    new string[] { "R1F1", "R1F2", }, 
    new string[] { "R2F1", "R2F2", }, 
}; 
var fieldNames = Enumerable.Range(1, rawData[0].Length).Select(field => "Field" + field); 
var table = new DataTable(); 
table.Columns.AddRange(fieldNames.Select(fieldName => new DataColumn(fieldName)).ToArray()); 
foreach (var record in rawData) 
{ 
    DataRow row = table.NewRow(); 
    for (int i = 0; i < record.Length; i++) 
    { 
     row[i] = record[i]; 
    } 
    table.Rows.Add(row); 
} 
DataContext = table; 

<Grid> 
    <DataGrid ItemsSource="{Binding}"/> 
</Grid> 

結果で:

alt text

String[]の収集のための

、あなたはあなたの動的な列を与えることDataTableを使用することができます

+0

+1は、WPF DataGridがExpandoまたはDynamicオブジェクトのフィールドに基づいて列を自動生成しないことを指摘しています。結局のところ、彼らは習慣ではないと思います。とにかく、それは私に試してもらう必要から私を救った。 –

+0

バインディング式ではWPF4では動的プロパティが機能しますが、ICustomTypeDescriptorでは検出できないため、DataGridは列を自動作成できないことを明確にする必要があります。しかし、列を自分で定義すると、DataGridでも動的プロパティが表示される可能性があります。それはちょうどポイントを敗北させる種類。 –

+0

リックありがとうございます。私が昨日必要としたのは、DataGridがLINQ Join(BindingList)によって作成された匿名型オブジェクトの列を自動生成する機能でした。私は、ランタイム時に匿名型を反映するCodeDomベースの匿名型プロモーターを作成し、バッキングフィールド、パブリックプロパティアクセサー、および匿名オブジェクトを受け入れるコンストラクタを持つ完全型を作成しました。誰かがこのコードを望むなら、私に連絡してください。 –

関連する問題