If you specify only the binding path, the binding mechanism will try to move along the path starting from the current one DataContext, therefore it ItemsSource="{Binding Path=Names}"doesn’t work that way, there are many different things to keep in mind, especially when doing more complex things.
, , DataBinding, - MSDN.
, XAML, , Window - , , DataContext.
1 - :
<Window Name="Window"
...>
<Grid>
<ListBox ...
ItemsSource="{Binding ElementName=Window, Path=Names}"
.../>
</Grid>
</Window>
2 -
<Grid>
<ListBox ...
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=Names}"
.../>
</Grid>
3 - DataContext
<Window ...
DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}">
<Grid>
<ListBox ...
ItemsSource="{Binding Path=Names}"
.../>
</Grid>
</Window>