J'ai une classe comme celle-ci:
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;
}
Mes boîtes de texte sont liées au nom et à l'âge de la viewModel. Si je change l'objet _Person dans la vue, dois-je appeler à nouveau pour chaque propriété un épargne-ut-utilité ou y a un moyen de le faire automatiquement (dans mon exemple de concret, j'ai environ 15 propriétés ..)?
Merci pour toute aide.
Bravo Joseph
Vous pouvez indiquer que toutes les propriétés ont changé en utilisant null
ou string.Empty
Pour le nom de propriété dans PropertyChangedEventArgs
. Ceci est mentionné dans la documentation pour PropertyChanged .
Une autre solution que j'ai utilisé pour aborder le problème de: définit d'abord la valeur, puis appelant le PropertyChangedEventArgs
est en ajoutant une fonction Set
dans mon ViewModelBase
qui ressemble à ceci:
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;
}
}
Au lieu de faire cela:
public string Name {
get { return PersonEntity.Name; }
set { PersonEntity.Name = value; RaisePropertyChanged("Name");
}
Vous pouvez maintenant obtenir la même chose en faisant cela:
public string Name {
get { return PersonEntity.Name; }
set { Set(ref PersonEntity.Name,value);
}