Property Setter中的Coerce Value - Silverlight 5

Ray*_*sen 6 data-binding silverlight

在下面的示例中,我们将ViewModel绑定到一个名为Message的单个属性的视图.此属性绑定到具有双向绑定的TextBox.对于这个测试,我们在setter中做了一些价值强制,并且再次改变了属性.

在Silverlight 4中,这非常有效.如果在属性设置器中更改了消息属性,则文本框将显示新值.例如,在文本框中键入"A"并失去焦点会导致Aaaaaaaaaa出现,因为值已更改.

然而,在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"));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ray*_*sen 1

Microsoft 已确认这是 Silverlight 5 中的一个错误。它仅发生在调试模式下,因此适用于发布模式。

如果禁用 XAML 绑定调试,问题就会消失。

Binding.IsDebuggingEnabled = false; 
Run Code Online (Sandbox Code Playgroud)