在Silverlight DataGrid中以编程方式禁用CellEditingTemplate

时间:2010-06-01 08:47:43

标签: silverlight datagrid celleditingtemplate

我有一个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 个答案:

答案 0 :(得分:2)

这样做的一种方法是让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