5

ここで、ビューモデルにモデルを追加しました:

public dal.UserAccount User  {
  get
  {
    return _user;
  }
  set
  {
    _user = value;
    RaisePropertyChanged(String.Empty); 
   }
}
                

私はプロパティ変更イベントを処理します...

public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
  if (this.PropertyChanged != null)
    this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
        
        

これは私が使用するバインディングです:

<TextBox Text="{Binding User.firstname, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
    
    

ビューの更新時に propertychange イベントがトリガーされないのはなぜですか?

4

2 に答える 2

13

PropertyChanged は、モデルで何かが変更されたことを UI に通知するために使用されます。Userオブジェクトの内部プロパティを変更しているため、プロパティ自体は変更されないため、PropertyChanged イベントは発生しません。User

次に、モデルはINotifyPropertyChangedインターフェイスを実装する必要があります。- つまり、UserAccountINotifyPropertyChanged が実装されていることを確認してください。そうしないと、変更してfirstnameもビューには影響しません。

別物:

RaisePropertyChanged が受け取るパラメーターは、変更されたプロパティの名前です。だからあなたの場合:

変化する:
RaisePropertyChanged(String.Empty);


RaisePropertyChanged("User");

MSDNから:

PropertyChanged イベントは、PropertyChangedEventArgs のプロパティ名として null または String.Empty を使用して、オブジェクトのすべてのプロパティが変更されたことを示すことができます。

(この場合、すべてのプロパティを更新する必要はありません)

PropertyChanged の概念について詳しくは、 こちらをご覧ください。

于 2013-03-06T11:30:52.897 に答える