[Silverlight] コードビハインドでデータバインディングを行う

12:50 AM on 2012年2月22日 ,

// BindingModeを「OneTime」にする場合

// ※バインディングソースとなるクラスはpublicにする
public class Person
{
    public int Age { get; set; }
}

private Person _bindingSource = new Person() { Age = 20 };

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
{
    System.Windows.Data.Binding b = new System.Windows.Data.Binding("Age");
    b.Source = this._bindingSource;
    b.Mode = System.Windows.Data.BindingMode.OneTime;
    this.TextBox1.SetBinding(TextBox.TextProperty, b);
}

// BindingModeを「OneWay」にする場合

// バインディングソースとなるクラスにINotifyPropertyChangedを継承させる
// ↓
// PropertyChangedイベントを実装する

// ※バインディングソースとなるクラスはpublicにする
public class Person : System.ComponentModel.INotifyPropertyChanged
{
    private int _age = 20;
    public int Age
    {
        get
        {
            return this._age;
        }
        set
        {
            this._age = value;
            this.OnPropertyChanged("Age");
        }
    }

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}

private Person _bindingSource = new Person() { Age = 20 };

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
{
    System.Windows.Data.Binding b = new System.Windows.Data.Binding("Age");
    b.Source = this._bindingSource;
    b.Mode = System.Windows.Data.BindingMode.OneWay;
    // XAMLに配置したテキストボックスのTextプロパティにバインドする
    this.TextBox1.SetBinding(TextBox.TextProperty, b);
}

// XAMLに配置したボタンのクリックイベントハンドラ
private void Button1_Click(object sender, RoutedEventArgs e)
{
    // バインディングソースの値が変わると、バインドしたテキストボックスのTextプロパティも変わる
    this._bindingSource.Age = this._bindingSource.Age + 1;
}