silverlight - 属性 setter 中的强制值 - Silverlight 5

标签 silverlight data-binding

在下面的示例中,我们将 ViewModel 绑定(bind)到具有称为 Message 的单个属性的 View 。此属性通过双向绑定(bind)绑定(bind)到 TextBox。对于这个测试,我们在 setter 中进行了一些值强制,并再次提高了属性的变化。

在 Silverlight 4 中,这非常有效。如果消息属性在属性 setter 中发生更改,则文本框将看到新值。例如。在文本框中键入“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"));
        }
    }
}

最佳答案

这个问题有几个解决方法,这似乎是 Silverlight 5 的绑定(bind)调试功能中的一个错误(请参阅@Ray Booysen 的回答)。

首先,重要的是要知道这不是生产中的问题,而是仅在调试应用程序时发生。因此,解决方法实际上只是为了在调试环境中重现生产行为(尽管禁用了一些调试功能)。

第一个解决方法是使用名为 IsDebuggingEnabled 的静态(在 VB.Net 中共享)字段禁用绑定(bind)调试。在 Binding类(class)。那里的文档提供了以下建议。

set this field to false in your application class constructor



注:此更改不能仅限于单个绑定(bind),而是会影响应用程序中的所有绑定(bind)。

第二个是在托管 Silverlight 应用程序的 Web 项目的项目属性中禁用 Silverlight 调试器。使用以下步骤进行此更改。
  • 在解决方案资源管理器中右键单击 Web 项目并选择属性。
  • 选择 Web 选项卡。
  • 向下滚动到调试器部分。
  • 取消选中标记为 Silverlight 的复选框。

  • 注:此更改不仅会禁用应用程序的绑定(bind)调试,还会禁用常规 Silverlight 调试。但是,可以启用其他调试器。

    关于silverlight - 属性 setter 中的强制值 - Silverlight 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11965408/

    相关文章:

    c# - Silverlight:字形宽度

    c# - MonthCalendar.SelectionRange 数据绑定(bind)示例

    c# - 绑定(bind)到最后一个数组元素

    java - 如何处理 JFace 绑定(bind)组合框中的空选择?

    wpf - Windows Phone 7/Silverlight/WPF MVVM 开发

    wpf - CoreceValueCallback 和 ValidateValueCallback 的区别?

    c# - 使用 Silverlight 和 com-interop 进行打印

    angular - HTML输入元素 : how to raise angular event handler after the text was changed

    c# - ITypedList 替代品?

    c# - Silverlight 4 获取完整异常