型付きデータテーブルをバインドした際に、一般的には以下のようなバインド式を書くであろう。
ここでは列名をFirstNameとしている。これは以下のように書いてもうまくいく。
{Binding FirstName}
{Binding Path=[FirstName]}
{Binding Path=.[FirstName]}
また、FirstNameが3番目の列であれば、
とも書くことができる。
つまり、[]内は必要に応じて列名とインデックスを読み替えているのである。
さて、ここで疑問が生じる。もし列名が2であれば、
は、2という列名の値をバインドするのであろうか? それとも3番目の列の値をバインドするのであろうか? ちなみに{Binding Path=["2"]} という書き方はできない。
試してみると、2という列名にバインドしている。 ところで、
と書いても2という列名にバインドすることになる。困った。このような場合、3番目の列にバインドするにはどう書けばいいんだろうか?
とりあえずコンバーターで実現することはできた。
{Binding Path=., Converter={StaticResource converter},ConverterParameter=3}
public class MyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
return "";
}
return ((System.Data.DataRowView)value).Row[int.Parse(parameter.ToString())];
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
こうするしか無いのであろうか? もっとも列名を数字にしなければ良いだけなんですが(^^;