データグリッドっぽい感じに表示するにはListViewを使うと言われてる。
ということでデータ表示用のクラスを用意してみた。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Collections.ObjectModel;
namespace ListBinding
{
public class Person : INotifyPropertyChanged
{
#region プロパティ
private int id;
public int ID
{
get { return id; }
set
{
id = value;
OnPropertyChanged("ID");
}
}
private string name;
public string Name
{
get { return name; }
set
{
name = value;
OnPropertyChanged("Name");
}
}
private int age;
public int Age
{
get { return age; }
set
{
age = value;
OnPropertyChanged("Age");
}
}
#endregion
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
public class PersonCollection : ObservableCollection<Person>
{
}
}
あとはXAML。
<Window x:Class="ListBinding.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:p="clr-namespace:ListBinding"
Title="List Binding" Width="300" Height="300">
<Window.Resources>
<p:PersonCollection x:Key="People">
<p:Person ID="1" Name="Tarou" Age="27" />
<p:Person ID="2" Name="Jirou" Age="20" />
<p:Person ID="3" Name="Saburou" Age="14" />
</p:PersonCollection>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListView Grid.Row="0" ItemsSource="{StaticResource People}">
<ListView.View>
<GridView>
<GridViewColumn Header="ID">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=ID}" MinWidth="100" TextAlignment="Right" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Name}" MinWidth="100" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Age">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Age}" MinWidth="100" TextAlignment="Right" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<Button Content="Current" Grid.Row="1"/>
</Grid>
</Window>
これで一応、テキストボックスに値が表示されるようになった!!
でも微妙な間がグリッドじゃないっぽい感じをかもし出してる。
微調整はどこでやるんだろうか。
ちなみに最後のButtonは何も関係ありません。