The road to C# master trapemiya

C#を中心に、.NETの話題を取り上げます。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  256  : 記事  1  : コメント  10763  : トラックバック  30

ニュース

Since 2005年10月26日

わんくま同盟

わんくま同盟

Microsoft MVP


Visual Developer - Visual C#

記事カテゴリ

書庫

日記カテゴリ

2009年5月19日 #

型付きデータテーブルをバインドした際に、一般的には以下のようなバインド式を書くであろう。

{Binding Path=FirstName} 

ここでは列名をFirstNameとしている。これは以下のように書いてもうまくいく。

{Binding FirstName}
{Binding Path=[FirstName]}
{Binding Path=.[FirstName]} 

また、FirstNameが3番目の列であれば、

{Binding Path=[2]}

とも書くことができる。

つまり、[]内は必要に応じて列名とインデックスを読み替えているのである。
さて、ここで疑問が生じる。もし列名が2であれば、

{Binding Path=[2]}

は、2という列名の値をバインドするのであろうか? それとも3番目の列の値をバインドするのであろうか? ちなみに{Binding Path=["2"]} という書き方はできない。

試してみると、2という列名にバインドしている。 ところで、

{Binding Path=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();
    }
} 

こうするしか無いのであろうか? もっとも列名を数字にしなければ良いだけなんですが(^^;

posted @ 16:18 | Feedback (561)