Let's say I have a property called Greeting that is principally composed of two bound properties: LastName and FirstName. Can I subscribe to updates on first and last name so I can force a refresh with OnPropertyChanged() for my Greeting property. Here's a simple example:

View

<!-- language: lang-xml -->
<TextBox Text="{Binding FirstName}" />
<TextBox Text="{Binding LastName}" />
<TextBlock Text="{Binding Greeting}" />

ViewModel

<!-- language: lang-vb -->
Public Property FirstName() As String
    Get
        Return _firstName
    End Get
	Set(ByVal value As String)
        _firstName = value
        OnPropertyChanged("FirstName")
    End Set
End Property

'... Omitting LastName for brevity ...

Public ReadOnly Property Greeting() As String
    Get
        Return String.Format("Hello {0} {1}", Firstname, LastName)
    End Get
End Property

The way this is currently set up, nothing will ever update the Greeting binding. I could put OnPropertyChanged("Greeting") in the setter for FirstName and LastName, but this feels wrong. In a more complex example, I'd rather each object just take care of refreshing itself when something changes.

Q:) Can I force an update for a ReadOnly Property when one of the Properties it's composed of changes?

You can call PropertyChange of Greetings from setter of FirstName and LastName

<!-- language: lang-vb -->
Public Property FirstName() As String
    Get
        Return _firstName
    End Get
    Set(ByVal value As String)
        _firstName = value
        OnPropertyChanged("FirstName")
        OnPropertyChanged("Greeting")
    End Set
End Property

OR

You can subscribe to PropertyChanged of your ViewModel in itself

<!-- language: lang-vb -->
AddHandler this.PropertyChanged, AddressOf PropertyChanged

and in PropertyChanged you can check which property is changed depending on that you can RaisePropertyChanged for Greeting