【MVVM】 コード・ビハインド(C#コード)で、バインディング(Binding)を設定するには

◆ C# Code

// <TextBox Name="textBox1" Text="{Binding Path=FirstName, Mode=TwoWay}" />
Binding bi = new Binding("FirstName");
bi.Mode = BindingMode.TwoWay;
textBox1.SetBinding(TextBox.TextProperty, bi);


// <TextBlock Name="textBox1" Text="{Binding Path=Birthday
//     , Converter={StaticResource TestConverter}
//     , ConverterParameter=yyyyMMdd}"/> 
Binding bi = new Binding("Birthday");
bi.Mode = BindingMode.TwoWay;
bi.Converter = NumericFormatConverter // IValueConverter
bi.ConverterParameter = "yyyyMMdd";
textBox1.SetBinding(TextBox.TextProperty, bi);


// <Button Name="button1" Command="{Binding Path=TestCommand, Mode=OneWay}" />
Binding bi = new Binding("TestCommand");
bi.Mode = BindingMode.OneWay;
button1.SetBinding(Button.CommandProperty, bi);

◆ IValueConverter

using System;
using System.Windows.Data;
using System.Globalization;

public class NumericFormatConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        string ret = "0";
        if (value != null && IsNumeric(value))
        {
            ret = ((decimal)value).ToString(parameter);
        }
        return ret;
    }

    public static bool IsNumeric(object value)
    {
        decimal ret;
        return decimal.TryParse(value.ToString()
            , NumberStyles.Any, null, out ret);
    }

    public object ConvertBack(object value, Type targetType
        , object parameter, CultureInfo culture)
    {
        decimal ret = 0m;
        decimal.TryParse(value.ToString(), NumberStyles.Any, null, out ret);
        return ret;
    }
}

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中