Q:

WPF - Why doesn't my binding act 2 way?

I've been struggling to get my head around data binding with WPF and receiving edits made to a datagrid for an ObservableCollection. 
I made a datagrid designed to allow the user only to edit existing value for a point (X and Y), with an ObservableCollection holding them called coordinates
The grid successfully fills with whatever data is in coordinates. However, whenever I change the X or Y value in the data grid (of which there is a duplicate column for X and Y seem to be made, for some reason), it is not updated in coordinates (shown when i use the console). Why is this the case?
Here is the XAML code: 
            <DataGrid x:Name="XYDataGrid" 
                    CanUserSortColumns="False" 
                    CanUserReorderColumns="False"
                    CanUserResizeColumns="False"
                    CanUserResizeRows="False"
                    ColumnWidth="*"
                    ItemsSource="{Binding}"
                    LostFocus="XYDataGrid_LostFocus">
            <DataGrid.Columns>
                <DataGridTextColumn Header="X" Binding="{Binding X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                <DataGridTextColumn Header="Y" Binding="{Binding Y, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
            </DataGrid.Columns>
        </DataGrid>

And in my C#:         
    private ObservableCollection<Point> coordinates = new ObservableCollection<Point>();

    public MainWindow()
    {
        InitializeComponent();

        coordinates.Add(new Point()
        {
            X = 1,
            Y = 1
        });

        this.DataContext = coordinates;            
    }

    private void XYDataGrid_LostFocus(object sender, RoutedEventArgs e)
    {
        Console.WriteLine((coordinates[0].X).ToString());

    }

A:

Like @Clemens pointed out, Point is a 
Struct which is a value type and not a reference type. Use a Class instead, something like:
public class CustomPoint
{
    public double X { get; set; }
    public double Y { get; set; }   
}

Then change the collection to:
private ObservableCollection<CustomPoint> coordinates = new ObservableCollection<CustomPoint>();

And to get rid of the duplicate column, follow @Bradley Uffner advice by setting the AutoGenerateColumns="False":
<DataGrid x:Name="XYDataGrid" 
                    CanUserSortColumns="False" 
                    CanUserReorderColumns="False"
                    CanUserResizeColumns="False"
                    CanUserResizeRows="False"
                    ColumnWidth="*"
                    ItemsSource="{Binding}"
                    AutoGenerateColumns="False"
                    LostFocus="XYDataGrid_LostFocus">
            <DataGrid.Columns>
                <DataGridTextColumn Header="X" Binding="{Binding X, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                <DataGridTextColumn Header="Y" Binding="{Binding Y, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
            </DataGrid.Columns>
        </DataGrid>

