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>
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