1

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

有没有办法做到这一点?

任何帮助将不胜感激。

提前致谢。

4

1 回答 1

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另一个控件。

于 2010-06-01T12:52:32.383 回答