Отключение 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 для другого контроля.

Другие вопросы по тегам