Thanks Shmuel Zang for your reply.
I have implemented the INotifyPropertyChanged in the model and subscribed the PropertyChanged event of the model in my ViewModel. It works.
As we know that by applying [CallerMemberName] attribute (used in OnPropertyChanged()), we avoid the "Rename Refactoring doesn't change the String values" problem. I would like to know that is there any mechanism like [CallerMemberName] attribute to avoid the same problem ("Rename Refactoring doesn't change the String values") which may happen in the myModel_PropertyChanged() event handler in my ViewModel?
(exaclty here in the code: if (e.PropertyName == "MyFirstName"))
Here is my code:
internal class Model:INotifyPropertyChanged
{
public Model()
{
}
string _FirstName = "Shahir";
public string FirstName
{
get { return _FirstName; }
set
{
_FirstName = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
if(PropertyChanged!=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
internal class MyViewModel:INotifyPropertyChanged
{
private Model myModel;
public MyViewModel(Model model)
{
this.myModel = model;
myModel.PropertyChanged += myModel_PropertyChanged;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
string _FirstName;
public string MyFirstName
{
get { return myModel.FirstName; }
set
{
_FirstName = value;
OnPropertyChanged();
}
}
private void myModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "FirstName")
{
MyFirstName = myModel.FirstName;
}
}
}