Для работы второго метода вам просто нужно
<Label Content="{Binding Surname}"/>
потому что вы уже установили DataContext на человека в элементе окна вверху.
Верхний текстовый текст работает для меня, однако привязка не отображается в конструкторе, если у меня нет отдельного класса, содержащего данные. Чтобы это работало, вы должны сделать что-то вроде этого:
<Window.Resources>
<local:BindingClass x:Key="bindingClass"/>
</Window.Resources>
<Grid DataContext="{StaticResource bindingClass.MyPerson}">
<Label Content="{Binding Surname}"/>
</Grid>
Для этого необходимо создать отдельный класс (в данном случае называемый BindingClass), который содержит свойство MyPerson.
Я думаю, что это работает в конструкторе, потому что я явно создаю новый экземпляр класса в xaml.