ListViewのGridViewを使って二次元配列(ジャグ配列)のデータを表示したいって場合の例。
ちゃんと作るときは、こんなことしないだろうけど、使い捨てアプリとかでならアリかな?
今回は、二次元目?のデータの数がすべて同じ二次元配列を想定しています。
それ以外だと、例外が出たりうまく表示できないかもしれません。
とりあえず、ListViewが無いとはじまらないのでListViewを定義する。
<Window x:Class="WpfArrayGrid.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Array">
<Grid>
<ListView Name="listView" />
</Grid>
</Window>
お次!
最終的なコードのイメージとしては、二次元配列のデータをItemsSourceに代入すると表示されるって感じ。
var data = new[]
{
new[]{"い", "ろ", "は"},
new[]{"に", "ほ", "へ"},
new[]{"と", "ち", "り"},
new[]{"ぬ", "る", "を"},
};
listView.ItemsSource = data; // ここの部分は、まだ仮
上記コードをWindow1のコンストラクタあたりに書いて実行しても動くことは動くけど、見てのとおり目指しているような表示はされない。
String[] 配列って表示してくれる。まぁそのとおりなんですけどね…
そういや、まだ最終的にこれがどう表示されたいかを示してなかった。
↓こんな感じに表示されることを想定しています。
列ヘッダは、どこかで別に指定してあげないといけないので、こちらもstringの配列で用意するようにしよう。
ということで、Window1に下のようなメソッドを1つ追加する。
private static void SetUpListView(ListView listView, string[] columns, string[][] data)
{
GridView view = new GridView();
for (int i = 0; i < columns.Length; i++)
{
view.Columns.Add(new GridViewColumn
{
Header = columns[i],
DisplayMemberBinding = new Binding(string.Format("[{0}]", i))
});
}
listView.View = view;
listView.ItemsSource = data;
}
そして、コンストラクタでデータをセットする部分を下のように書き換える。
var data = new[]
{
new[]{"い", "ろ", "は"},
new[]{"に", "ほ", "へ"},
new[]{"と", "ち", "り"},
new[]{"ぬ", "る", "を"},
};
SetUpListView(listView, new[] { "col1", "col2", "col3" }, data);
これで二次元配列のデータをListViewに表示できるようになる。
使い捨て用!