Один из способов сделать это состоит в том, чтобы два элемента управления перекрывали друг друга в вашем CellEditingTemplate
и отображали только тот, который вам нужен. Как то так
<local:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Grid>
<ComboBox Visibility="{Binding CategoryTypeName, Converter={StaticResource ConverterToDecideIfItShouldBeEditable}}"
Width="90" x:Name="CategoryCombo"
ItemsSource="{Binding CategoryTypes}"
DisplayMemberPath="Name"
SelectionChanged="CategoryCombo_SelectionChanged" />
<TextBox Text="{Binding CategoryTypeName}"
Visibility="{Binding CategoryTypeName, Converter={StaticResource ConverterToDecideIfItShouldBeEditable},ConverterParameter=Inverse}"/>
</Grid>
</DataTemplate>
</local:DataGridTemplateColumn.CellEditingTemplate>
Ключом к этому является конвертер. Второе текстовое поле дает ConverterParameter как «Inverse», который преобразователь использует для возврата противоположного значения. Используя это, вы можете заставить преобразователь возвращать Visibility.Visible
для одного элемента управления и Visibility.Collapsed
для другого элемента управления.