在下面的示例中,我们将 ViewModel 绑定到具有称为 Message 的单个属性的视图。此属性通过双向绑定绑定到 TextBox。对于这个测试,我们在 setter 中进行了一些值强制,并再次提高了属性的变化。
在 Silverlight 4 中,这非常有效。如果消息属性在属性设置器中发生更改,则文本框将看到新值。例如,在文本框中键入“A”并失去焦点将导致 Aaaaaaaaaaa 出现在值更改时。
然而,在 Silverlight 5 中,这似乎被打破/改变了。在 setter 中修改值后,getter 永远不会被命中。在两者之间添加一个 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"));
}
}
}