2017-03-02 26 views
1

私はこれに関する多くの質問を読んできましたが、これまでのところ私は明らかに単純な問題について答えを見つけることができませんでした。WPF MVVMがViewModelにテキストボックスデータを取得しています

私はプロパティであるビューモデルを持っています。私のXAMLでは、そのプロパティへのバインディングを持つTextBoxがあります。

しかし、このプロパティは決して変更されないようです。ここで

は、テキストボックスです:

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

とのViewModelのための背後に関連するコード:

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

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

私はセッターでのif文にブレークポイントを入れているが、それはトリガーはありません。私は明白な何かを逃したことがありますか?私はtwowayにバインディングモードを設定しようとしましたが、何も変更されませんでした。

私は少し怒っている。どんな助けもありがとう!

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

また、あなたがあなたのインスタンスにTextBoxまたはその親要素のいずれかのDataContextを設定していることを確認してくださいCharNameFromTBプロパティが定義されているビューモデルクラス。

また、デフォルトでは、TextBoxがフォーカスを失ったときにsourceプロパティが設定されます。

あなたがそれぞれのソースプロパティを更新したい場合は、PropertyChangedBindingUpdateSourceTriggerプロパティを設定する必要がありますキーストローク:

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

多くのご協力いただきありがとうございます! – TheFaithfulLearner

関連する問題