2017-03-02 56 views
1

我已經閱讀了很多關於這個的問題,到目前爲止我還沒能在這個看起來很簡單的問題上找到答案。WPF MVVM獲取文本框數據到ViewModel

我有一個視圖模型,其中是一個屬性。在我的XAML中,我有一個綁定到該屬性的TextBox。

但該屬性似乎永遠不會改變。

這裏的文本框:

<TextBox Grid.Row="1" 
     Grid.Column="0" 
     Margin="4" 
     Text="{Binding CharNameFromTB}" /> 

背後的視圖模型相關代碼:

private String _charNameFromTB; 
String CharNameFromTB 
{ 
    get { return _charNameFromTB; } 

    set 
    { 
     if (!string.Equals(this._charNameFromTB, value)) 
     { 
      this._charNameFromTB = value; 
      RaisePropertyChanged("CharNameFromTB"); 
     } 
    } 
} 

我已經把一個破發點上的二傳手if語句,但它永遠不會觸發。我錯過了一些明顯的東西嗎?我試着將綁定模式設置爲雙向,但這並沒有改變任何東西。

這讓我有點生氣。任何幫助,將不勝感激!

+1

嘗試'文本= 「{結合CharNameFromTB,UpdateSourceTrigger =的PropertyChanged}」' – Tomtom

+0

檢查你的輸出窗口,帶綁定的錯誤不會使代碼崩潰,而是將錯誤輸出到輸出窗口,這應該總是第一次檢查綁定是否工作不正常 – MikeT

+0

如果這對下一個端口沒有幫助的電話是給用戶一個轉換器https://www.wpftutorial.net/DebugDataBinding.html – MikeT

回答

3

你應該把財產public爲了能夠綁定到它:

private String _charNameFromTB; 
public String CharNameFromTB 
{ 
    get { return _charNameFromTB; } 

    set 
    { 
     this._charNameFromTB = value; 
     RaisePropertyChanged("CharNameFromTB"); 
    } 
} 

還要確保您在TextBoxDataContext或其任何父元素的設定實例您查看模型類,其中定義了CharNameFromTB屬性。

另請注意,默認情況下,當TextBox失去焦點時,會設置source屬性。

如果你想在每一個鍵,你應該設置BindingPropertyChangedUpdateSourceTrigger屬性更新源屬性:

<TextBox Grid.Row="1" 
     Grid.Column="0" 
     Margin="4" 
     Text="{Binding CharNameFromTB, UpdateSourceTrigger=PropertyChanged}" /> 
+0

非常感謝您的幫助! – TheFaithfulLearner