Отключение CellEditingTemplate программно в Silverlight DataGrid
У меня есть Silverlight Datagrid, я хотел бы сделать некоторые ячейки программно доступными для чтения. В частности, у меня есть CellEditingTemplate, я хотел бы отключить или включить редактирование ячейки в зависимости от значения CategoryTypeName (см. Ниже xmal).
<local:DataGridTemplateColumn Header="Category" >
<local:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding CategoryTypeName}"/>
</DataTemplate>
</local:DataGridTemplateColumn.CellTemplate>
<local:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox
Width="90"
x:Name="CategoryCombo"
ItemsSource="{Binding CategoryTypes}"
DisplayMemberPath="Name"
SelectionChanged="CategoryCombo_SelectionChanged"
/>
</DataTemplate>
</local:DataGridTemplateColumn.CellEditingTemplate>
</local:DataGridTemplateColumn>
Есть ли способ сделать это?
Любая помощь будет очень высоко ценится.
Заранее спасибо.
1 ответ
Одним из способов сделать это было бы иметь два элемента управления, перекрывающих друг друга в вашем 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
для другого контроля.