Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C#/WPF: PropertyChanged for all Properties in ViewModel?

I've a class like this:

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;     } 

My TextBoxes are bound to Name and Age of the ViewModel. If I change the _person object in the ViewModel, do I have to call for each Property a RaisePropertyChanged again or is there a way to do this automaticly (in my concret example I have about 15 Properties..)?

Thanks for any help.

Cheers Joseph

like image 799
Joseph jun. Melettukunnel Avatar asked Dec 07 '09 13:12

Joseph jun. Melettukunnel


People also ask

What C is used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...

What is C in C language?

What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.

What is the full name of C?

In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr.

Is C language easy?

C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.


2 Answers

You can indicate all properties have changed by using null or string.Empty for the property name in PropertyChangedEventArgs. This is mentioned in the documentation for PropertyChanged.

like image 95
Phil Devaney Avatar answered Sep 22 '22 13:09

Phil Devaney


One other solution I used to tackle the problem of: first setting the value and then calling the PropertyChangedEventArgs is by adding a Set function in my ViewModelBase which looks like this:

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;    } } 

Instead of doing this:

public string Name {      get { return PersonEntity.Name; }     set { PersonEntity.Name = value; RaisePropertyChanged("Name"); }  

You can now achieve the same by doing this:

public string Name {      get { return PersonEntity.Name; }     set { Set(ref PersonEntity.Name,value); }  
like image 38
JoshuaRMS Avatar answered Sep 23 '22 13:09

JoshuaRMS