Отключение CellEditingTemplate программно в Silverlight DataGrid - PullRequest
1 голос
/ 01 июня 2010

У меня есть 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 Ответ

2 голосов
/ 01 июня 2010

Один из способов сделать это состоит в том, чтобы два элемента управления перекрывали друг друга в вашем 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 для другого элемента управления.

...