WPFのデータバインディングについて、特に階層構造を持つViewModelをバインドする場合の仕組みについて教えて下さい。

ViewModel定義

public class Outer : INotifyPropertyChanged {
    public Inner Inner { /* get,setのコードは省略 */ }
}

public class Inner : INotifyPropertyChanged {
    public string Hoge { /* get,setのコードは省略 */ }
}

XAML

<Window.DataContext>
    <vm:Outer/>
</Window.DataContext>

<Grid>
    <TextBox Text="{Binding Inner.Hoge}"/>
</Grid>

上記のようなコードであるとき、TextBoxInnerインスタンスのPropertyChangedイベントを直接的に監視しているのでしょうか?
それともDataContextで指定されているOuterインスタンスのPropertyChangedイベントを監視しているのでしょうか?