2010-06-01 2 views
1

Silverlight Datagrid를 사용하고 있는데 프로그래밍 방식으로 특정 셀을 읽기 전용으로 만들고 싶습니다. 특히 CellEditingTemplate이 있는데, CategoryTypeName의 값에 따라 셀 편집을 끄거나 켭니다 (아래 xmal 참조).Silverlight DataGrid에서 프로그래밍 방식으로 CellEditingTemplate 사용 안 함

   <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> 

이 방법이 있습니까?

도움이 될 것입니다.

미리 감사드립니다.

답변

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을 반환 할 수 있습니다.