同じ問題が発生しました。セルは一部の行では読み取り専用である必要がありますが、他の行では読み取り専用ではありません。回避策は次のとおりです。
アイデアは、2つのテンプレートを動的に切り替えることですCellEditingTemplate
。1つはのテンプレートと同じで、もう1つはCellTemplate
編集用です。これにより、編集モードは編集モードではありますが、非編集セルとまったく同じように機能します。
以下は、これを行うためのサンプルコードです。このアプローチには、次のものが必要であることに注意してDataGridTemplateColumn
ください。
まず、読み取り専用セルと編集セルの2つのテンプレートを定義します。
<DataGrid>
<DataGrid.Resources>
<!-- the non-editing cell -->
<DataTemplate x:Key="ReadonlyCellTemplate">
<TextBlock Text="{Binding MyCellValue}" />
</DataTemplate>
<!-- the editing cell -->
<DataTemplate x:Key="EditableCellTemplate">
<TextBox Text="{Binding MyCellValue}" />
</DataTemplate>
</DataGrid.Resources>
</DataGrid>
ContentPresenter
次に、追加のレイヤーを使用してデータテンプレートを定義し、を使用Trigger
してのを切り替えます。これContentTemplate
により、上記の2つのテンプレートをバインディングContentPresenter
によって動的に切り替えることができます。IsEditable
<DataGridTemplateColumn CellTemplate="{StaticResource ReadonlyCellTemplate}">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<!-- the additional layer of content presenter -->
<ContentPresenter x:Name="Presenter" Content="{Binding}" ContentTemplate="{StaticResource ReadonlyCellTemplate}" />
<DataTemplate.Triggers>
<!-- dynamically switch the content template by IsEditable binding -->
<DataTrigger Binding="{Binding IsEditable}" Value="True">
<Setter TargetName="Presenter" Property="ContentTemplate" Value="{StaticResource EditableCellTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
HTH