私はこのようなクラスを持っています:
public class PersonViewModel : ViewModelBase //Here is the INotifyPropertyChanged Stuff
{
public PersonViewModel(Person person)
{
PersonEntity = person;
}
public Person PersonEntity {
get { return PersonEntity.Name; }
private set { PersonEntity.Name = value; RaisePropertyChanged("PersonEntity");
}
public string Name {
get { return PersonEntity.Name; }
set { PersonEntity.Name = value; RaisePropertyChanged("Name");
}
public int Age{
get { return PersonEntity.Age; }
set { PersonEntity.Age= value; RaisePropertyChanged("Age");
}
public void ChangePerson(Person newPerson)
{
//Some Validation..
PersonEntity = newPerson;
}
私のTextBoxは、ViewModelのNameとAgeにバインドされています。 ViewModelの_personオブジェクトを変更した場合、各プロパティに対して再度RaisePropertyChangedを呼び出す必要がありますか、またはこれを自動的に行う方法があります(具体的な例では、約15のプロパティがあります)。
助けてくれてありがとう。
乾杯ジョセフ
null
のプロパティ名にPropertyChangedEventArgs
またはstring.Empty
を使用すると、すべてのプロパティが変更されたことを示すことができます。これは PropertyChanged のドキュメントで言及されています。
最初に値を設定してからPropertyChangedEventArgs
を呼び出すという問題に取り組むために使用したもう1つの解決策は、Set
にViewModelBase
関数を追加することです。
public class ViewModelBase : INotifyPropertyChanged
{
protected bool Set<T>(ref T backingField, T value, [CallerMemberName] string propertyname = null)
{
// Check if the value and backing field are actualy different
if (EqualityComparer<T>.Default.Equals(backingField, value))
{
return false;
}
// Setting the backing field and the RaisePropertyChanged
backingField = value;
RaisePropertyChanged(propertyname);
return true;
}
}
これを行う代わりに:
public string Name {
get { return PersonEntity.Name; }
set { PersonEntity.Name = value; RaisePropertyChanged("Name");
}
これを行うことで同じことを達成できます:
public string Name {
get { return PersonEntity.Name; }
set { Set(ref PersonEntity.Name,value);
}