if have the following wpf data grid:
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding BlocksToGenerateList}"
GridLinesVisibility="Vertical"
CanUserDeleteRows="True"
CanUserAddRows="False"
CanUserSortColumns="False">
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="ToolTip" Value="{Binding ToolTip}"/>
<Setter Property="Background" Value="LightBlue" />
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Blue"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
<DataTrigger Binding="{Binding VisibleInGrid, Mode=TwoWay}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Typ" Width="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding Path=TypeString, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding Types}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Ort" Width="150">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<ComboBox SelectedItem="{Binding Path=Location, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding Locations}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="False" Width="244"/>
<DataGridTextColumn Header="Control Unit" Binding="{Binding ControllingControlUnit}" IsReadOnly="{Binding IsControlUnit}" Width="200"/>
<DataGridTextColumn Header="Fehlernummer" Binding="{Binding FaultValue}" IsReadOnly="False" Width="90"/>
<DataGridTextColumn Header="Meldungsnummer" Binding="{Binding MessageValue}" IsReadOnly="False" Width="110"/>
</DataGrid.Columns>
</DataGrid>
All the Bindings are to a class called GridBlock, and BlocksToGenerateList is a ObserverableCollection of Type Item. Now, every binding works as excpected, except this one: IsReadOnly="{Binding IsControlUnit}".
Can somebody help me, or explain what the issue could be? Thank you!
Edit: Screenshot of binding error in Visual Studio
Error translated to english: Cannot find governing FrameworkElement or FrameworkContentElement for target element
Edit: Some information about the view model
private ObservableCollection<GridBlock> _BlocksToGenerateList;
public ObservableCollection<GridBlock> BlocksToGenerateList
{
get { return _BlocksToGenerateList; }
set
{
if (_BlocksToGenerateList == value)
{
return;
}
_BlocksToGenerateList = value;
RaisePropertyChanged("BlocksToGenerateList");
}
}
GridBlock has a bool property called IsControlUnit
private bool _IsControlUnit;
public bool IsControlUnit
{
get { return _IsControlUnit; }
set
{
if (_IsControlUnit == value)
{
return;
}
_IsControlUnit = value;
RaisePropertyChanged("IsControlUnit");
}
}
Property IsReadOnly does not see the IsControlUnit field.
You can also use the template for editing and reading.
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>Control Unit</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ControllingControlUnit}" Width="200" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding ControllingControlUnit}" IsReadOnly="{Binding IsControlUnit, UpdateSourceTrigger=PropertyChanged}" Width="200" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
You can also add IsEnabled, then you cannot select text