ネタ元
http://karlshifflett.wordpress.com/2009/05/27/wpf-4-0-data-binding-change-great-feature/
WPF4.0からBindingの動きが変わるらしいです。
百聞は一見にしかずということなので、早速見てみます。
まず、VS2008でWPFアプリケーションを作ります。
そしていつもとちょっと違うPersonクラスを作成します。
public class Person : INotifyPropertyChanged
{
#region INotifyPropertyChanged メンバ
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
#endregion
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
// 名前は大文字なのです
if (!string.IsNullOrEmpty(_name))
{
_name = _name.ToUpper();
}
OnPropertyChanged("Name");
}
}
}
名前を大文字に変換するロジックがNameプロパティに仕込まれています。これをバインドする簡単なXAMLを作ります。
<Window x:Class="WpfBindingTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfBindingTest"
Title="Window1" Height="300" Width="300">
<Window.DataContext>
<local:Person />
</Window.DataContext>
<StackPanel>
<!-- PersonのNameプロパティにバインド -->
<TextBox Text="{Binding Name}" />
<Button Content="Dummy" />
</StackPanel>
</Window>
これを実行すると…
aiueoと入力して、ボタンにフォーカスを移しても大文字にはなりません!!おしぃ。
同じものをWPF4.0で作成すると…(VS2010 betaで作成しました)
aiueoと入力してボタンにフォーカスを移すと…
大文字になります!!
どういうパイプラインになってるのかは、よく知りませんm(_ _)m