以下の例では、ViewModel を Message という単一のプロパティを持つビューにバインドしています。このプロパティは、双方向バインディングで TextBox にバインドされます。このテストでは、セッターで値の強制を行い、変更されたプロパティを再度上げます。
Silverlight 4 では、これは完全に機能しました。プロパティ セッターでメッセージ プロパティが変更された場合、テキスト ボックスには新しい値が表示されます。たとえば、テキストボックスに「A」と入力してフォーカスを失うと、値が変更されたときに Aaaaaaaaaaa が表示されます。
ただし、Silverlight 5 では、これが壊れているか変更されているようです。セッターで値が変更された後、ゲッターがヒットすることはありません。間に IValueConverter を追加すると、Convert/ConvertBack メソッドがヒットしないことがわかります。バージョン 4 と 5 の間で何か根本的な変更があったようです。何か変更はありましたか? これはバグですか?
public class ViewModel : INotifyPropertyChanged
{
private string _message;
public event PropertyChangedEventHandler PropertyChanged;
public string Message
{
get
{
return _message;
}
set
{
_message = value;
this.RaisePropertyChanged();
if (_message.Length < 10)
{
_message = _message.PadRight(10, 'a');
this.RaisePropertyChanged();
}
}
}
private void RaisePropertyChanged()
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs("Message"));
}
}
}