As @Tim said in his comment, you need to call NotifyPropertyChanged("FullName") from every property setter that could cause FullName to change (in this case, FirstName and LastName).
This would result in:
public string FirstName { get { return _Student.FirstName; } set { _Student.FirstName = value; NotifyPropertyChanged("FirstName"); NotifyPropertyChanged("FullName"); } } public string LastName { get { return _Student.LastName; } set { _Student.LastName = value; NotifyPropertyChanged("LastName"); NotifyPropertyChanged("FullName"); } } With the above changes, a button shouldn't be necessary if you all you want to do is display the full name based on the first name and last name. All you really need to do is have a TextBlock in your XAML that binds to FullName, like this:
<TextBlock Text="{Binding FullName}" /> As the first name or last name is updated, notification would immediately be sent that would cause the TextBlock to update to the new FullName.
What do you have in mind for the button? What would happen when you press it?
Based on the OP's comment, I'm adding an example of how a Button could be used.
First change your XAML to this:
<TextBlock Text="{Binding FullName}" Visibility="{Binding FullNameVisibility}" /> <Button Content="Display Full Name" Command="{Binding ShowFullNameCommand}" /> Second, change your view model to this:
public Visibility FullNameVisibility { get; private set; } public ICommand ShowFullNameCommand { get; private set; } public StudentViewModel(Student student) { _Student = student; FullNameVisibility = Visibility.Hidden; ShowFullNameCommand = new RelayCommand(() => FullNameVisibility = Visibility.Visible); } When you start your app, the full name will be hidden. When the user clicks the button, full name will appear.
Note that this assumes you are using MVVM Light (which has RelayCommand). If you are using a different MVVM library, that command may be called something else.