2012-08-15 28 views
6

在下面的示例中,我們使用名爲Message的單個屬性將ViewModel綁定到視圖。該屬性綁定到具有雙向綁定的TextBox。對於這個測試,我們在二傳手中做了一些價值強制,並且將財產再次改變。屬性設置器中的脅迫值 - Silverlight 5

在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")); 
     } 
    } 
} 

回答

1

這已被Microsoft確認爲Silverlight 5中的一個錯誤。它只發生在調試模式下,所以適用於發佈模式。

如果您禁用了XAML綁定調試,問題就沒有了。

Binding.IsDebuggingEnabled = false; 
3

有幾個解決方法這個問題看來是在Silverlight 5的結合調試功能中的錯誤(見@Ray Booysen的答案)。

首先,重要的是要知道這不是生產中的問題,而只是在調試應用程序時發生。因此,變通方法只能在調試環境中重現生產行爲(儘管禁用了某些調試功能)。

第一個解決方法是使用Binding類中的名爲IsDebuggingEnabled的靜態(在VB.Net中共享)字段禁用綁定調試。那裏的文檔提供了以下建議。

集這一領域爲false在您的應用程序類的構造函數

注:這種變化不能侷限於單一的結合,而是會影響到應用程序中的所有綁定。

二是禁用的承載Silverlight的應用程序的Web項目的項目屬性Silverlight的調試器。使用以下步驟進行此更改。

  1. 右鍵單擊解決方案資源管理器中的Web項目,然後選擇屬性。
  2. 選擇Web選項卡。
  3. 向下滾動到調試器部分。
  4. 取消勾選標記爲Silverlight的複選框。

注:這種變化會禁用應用程序,不僅結合調試,而且一般的Silverlight調試。其他調試器可以啓用。