2010-02-06 25 views
1

我希望有人能幫助我解決這個問題,我懷疑我正在做一些愚蠢的事情。我綁定了一個TextBox,以便Text綁定到InputValue。基本上,當文本值改變時,我有一個方法(Inches.Parse),它檢查值並返回格式良好的字符串。在set訪問器中更改文本框綁定的文本值

如果解析沒有錯誤,我希望文本框具有名爲「result」的格式良好的字符串。但是,TextBox不會顯示新文本?任何幫助,將不勝感激。

public string InputValue 
{ 
    get 
    { 
     return _inputValue; 
    } 
    set 
    { 
     if (_inputValue != value) 
     {           
      bool error; 
      string result = Inches.Parse(value, 64, out error);      

      if (error != IsValid) 
      { 
       IsValid = error; 
      } 
      if (!error) 
      { 
       _inputValue = result; 
      } 
      else 
      { 
       _inputValue = value; 
      } 

      NotifyPropertyChanged("InputValue"); 
     } 
    } 
} 

回答

3

這是一個錯誤/問題,將明顯被固定在點網4.0

基本上,問題是,如果一個綁定設置的屬性不會二傳手中尋找NotifyPropertyChanged。您可以通過調度程序在主UI線程上調用NotifyPropertyChanged來解決此問題。它是這樣

Application.Current.Dispatcher.BeginInvoke((Action)delegate { NotifyPropertyChanged("InputValue"); }); 

把這個在您的二傳手做,你應該罰款..

+0

謝謝Aran,明天我會試試看看會發生什麼。 – 2010-02-07 05:20:30

+0

不用擔心和生病明天在代碼工作,以確保我得到它正確 – 2010-02-07 05:44:22

+0

檢查出來,寫了一個測試項目,上面的語法工程 – 2010-02-07 22:36:00

1

的問題似乎是,它是由自身結合源屬性的更新過程中TextBox不會更新出現的值。

的解決方法可能是設置此綁定表達式

{Binding Path=InputValue, Mode=TwoWay,UpdateSourceTrigger=Explicit} 

注意UpdateSourceTrigger=Explicit此說,你將更新源手動

再添加處理程序TextBoxLostFocus事件(所以我們相信用戶已完成編輯)

textBox1.LostFocus += 
(s, e) => 
    { 
    var text = textBox1.Text; 
    [DataSource].InputValue = text; 
    }; 

因此,當TextBox失去focu s數據源中的值將被更新和格式化,然後TextBox將被反彈。

希望這會幫助你。

+0

約updatesourcetrigger的一些信息是在這裏:http://msdn.microsoft.com/en-us/library/ ms752347.aspx – 2010-02-06 17:34:16

+0

感謝您的建議。欣賞它。 – 2010-02-07 05:20:13