'How to bind Itemsource of DataGridto the IsReadOnly property of the internal DataGridTextColumn?

I have a DataGrid (below) that takes in SimulatedItems as an ItemsSource which is from my viewmodel. The SimulatedItems is an ObservableCollection of SimulatedItem. Inside SimulatedItem there is a variable DriverID, NameID and Active. Both the DataGridTextColumns below correctly reference these variables inside for Binding but for IsReadOnly it does not work. It appears IsReadOnly is attempting to bind to my viewmodel rather than the SimulatedItems. How do I get IsReadOnly to bind to my item from ItemsSource?

<DataGrid Grid.Row="1" ItemsSource="{Binding SimulatedItems}">
  <DataGrid.Columns>
    <DataGridTextColumn
      Header="NameID"
      Binding="{Binding NameID}"
      IsReadOnly="{Binding Active}">
    </DataGridTextColumn>
    <DataGridTextColumn
      Header="DriverID"
      Binding="{Binding Path=DriverID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
      IsReadOnly="{Binding Active}">
    </DataGridTextColumn>
  </DataGrid.Columns>
</DataGrid>


Solution 1:[1]

Unfortunately this will not work.

DataContexts do not work with DataGridColumns. The binding can't find the datacontext.

Read more about it here https://thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/

Solution: Use templates

<DataGrid Grid.Row="1" ItemsSource="{Binding SimulatedItems}">
     <DataGrid.Columns>
           <DataGridTemplateColumn Header="NameID" Width="200">
                 <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                          <TextBox Text="{Binding NameID}" IsReadOnly="{Binding  Active}" BorderThickness="0" Background="Transparent"/>
                      </DataTemplate>
                 </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="DriverID" Width="200">
                  <DataGridTemplateColumn.CellTemplate>
                         <DataTemplate>
                             <TextBox Text="{Binding Path=DriverID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="{Binding Active}" BorderThickness="0" Background="Transparent"/>
                         </DataTemplate>
                  </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
     </DataGrid.Columns>
</DataGrid>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 enesimam