2011-08-11 17 views
3

私はWPFでMVVMを使用する初心者で、テキストボックスやラベルの値を変更することは不可能に思えます。ここに例があります。 XAMLでC#WPF MVVM TextBoxの値が変更されない

名の元の値は、 "ピーター" です。

しかし、ViewModelでコマンドを呼び出すボタンを押した後、Nameの値を "John"に変更します。したがって、テキストボックスの値もJohnに変更されるとします。ただし、変更はありません。

私はネット上で多くの例を見つけましたが、どれもこの種の機能を実装していませんでした。私がそれらから学んだことは、ListViewのCommandとItemsSourceを使うことです。 ボタンを使用してビューのItemsSourceを変更するコマンドを使用すると、ListViewの値が変更されます。 Binding to ItemsSourceが変更されると、その値は自動的に変更されます。

ただし、TextBoxまたはLabelの値を変更することはできません。バインディングの値が既に変更されています。

実際は、私はMVVMではかなり若いです。私はまだ私が知らないほど多くを持っていると思う。 ボタンをクリックした後にテキストボックスを変更するためにどのようにすべきかの例を教えてください。ちなみに、私はボタンのコマンドをどのように作るのかについてはあまりよく分かりません。それはネットからのサンプルで見つけたほどのコードを含んでいるようです。単純な方法はありますか?

ありがとうございました。

+2

から一例である、あなたのViewModelは 'INotifyPropertyChanged'を実装していますか? –

+0

+1 Stephan私はそれがおそらく答えであると書いてお勧めします。 –

+0

ありがとう!私は本当にそうしなかった。 – user883434

答えて

3

あなたのViewModelはINotifyPropertyChangedを実装する必要があります。 ドキュメントは、WPFを使用すると、プロパティの値を変更してあることを知っているように、あなたのビューモデルがINotifyPropertyChangedを実装する必要がありhere

public class Bar : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    private string foo; 
    public string Foo 
    { 
    get { return this.foo; } 
    set 
    { 
     if(value==this.foo) 
     return; 
     this.foo = value; 
     this.OnPropertyChanged("Foo"); 
    } 
    } 
    private void OnPropertyChanged(string propertyName) 
    { 
    if(this.PropertyChanged!=null) 
     this.PropertyChanged(this,new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

こんにちは、私はすでに名前空間System.ComponentModelを含んでいますが、キーワードキーワードPropertyChangedはまだ黒です。どうして? – user883434

+0

'ProertyChanged'は' INotifyPropertyChanged'で定義されたイベントの名前です。そのインターフェイスを実装する必要があります。私は自分の答えを更新し、イベントの宣言を追加しました。 –

+0

上記のコードはViewModelに追加されていますか? – user883434

1

を参照してください。ここで

// This is a simple customer class that 
// implements the IPropertyChange interface. 
public class DemoCustomer : INotifyPropertyChanged 
{ 
    // These fields hold the values for the public properties. 
    private string customerNameValue = String.Empty; 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged(String info) 
    { 
     var listeners = PropertyChanged; 
     if (listeners != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 

    public string CustomerName 
    { 
     get 
     { 
      return this.customerNameValue; 
     } 

     set 
     { 
      if (value != this.customerNameValue) 
      { 
       this.customerNameValue = value; 
       NotifyPropertyChanged("CustomerName"); 
      } 
     } 
    } 
} 
+0

このコードをViewModelに追加しますか? PropertyChangedに何か追加する必要がありますか?それ以上の仕事をするために必要なものは何ですか? – user883434

関連する問題