Here I added a model to my viewmodel...
public dal.UserAccount User {
get
{
return _user;
}
set
{
_user = value;
RaisePropertyChanged(String.Empty);
}
}
I handle property change event...
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
This is the binding i use.
<TextBox Text="{Binding User.firstname, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" />
Problem is propertychange event is not trigger on updating view ? Can anybody tell me what i am doing wrong...
You can invoke a property changed event from another class. Not particularly useful if you have all the sources. For closed source it might be. Though I wouldn't consider it experimental and not production ready.
See this console copy paste example:
PropertyChanged is used to notify the UI that something has been changed in the Model. Since you're changing an inner property of the User object - the
User
property itself is not changed and therefore the PropertyChanged event isn't raised.Second - your Model should implement the INotifyPropertyChanged interface. - In other words make sure
UserAccount
implements INotifyPropertyChanged, otherwise changing thefirstname
will not affect the view either.Another thing:
The parameter RaisePropertyChanged should receive is the Name of the property that has changed. So in your case:
Change:
RaisePropertyChanged(String.Empty);
To
RaisePropertyChanged("User");
From MSDN:
(No need to refresh all the Properties in this case)
You can read more on the concept of PropertyChanged here