我有一个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>
有办法做到这一点吗?
非常感谢任何帮助。
提前致谢。
答案 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
。