Wpf中的DataGrid Edit和Readonly行为

时间:2013-06-03 13:31:21

标签: wpf datagrid readonly

我是WPf Datagrid的新手。我的要求是如果我在datagrid中选择一个单元格并按Enter键,它应该更改为readonly = false(可编辑),用户可以更改内容,如果按下回车键,则单元格应该更改为readonly = true(不可编辑)。

我的xaml看起来像这样:

<DataGrid AutoGenerateColumns="False" Height="496"  HorizontalAlignment="Left"  
          PreviewKeyDown="DgvMaterial_PreviewKeyDown" DataGridCell.Selected="DataGrid_select" 
          Name="DgvMaterial" VerticalAlignment="Top" Width="958" Margin="21,20,0,0"  
          ItemsSource="{Binding Path=., Mode=OneWay}"   
          AlternationCount="1" AlternatingRowBackground="#FFE9FFE9" 
          SelectionUnit="FullRow" CanUserResizeColumns="False" DataContext="{Binding}" 
          RowHeight="30" UseLayoutRounding="True" 
          RowHeaderWidth="0" OverridesDefaultStyle="False" ColumnHeaderHeight="30" 
          SelectionMode="Single" ScrollViewer.VerticalScrollBarVisibility="Auto" 
          FontFamily="MS Gothic" FontSize="12" CellStyle="{StaticResource Body_Content_DataGrid_Centering}" 
          IsHitTestVisible="True" SelectionChanged="DgvMaterial_SelectionChanged" 
          Loaded="DgvMaterial_Loaded" CellEditEnding="DgvMaterial_CellEditEnding" TabIndex="5"
          SelectedIndex="-1" IsReadOnly="True"> 

1 个答案:

答案 0 :(得分:2)

您正在寻找的是DataGridTemplateColumn可能有2个模板。一个是显示值(DataGridTemplateColumn.CellTemplate)而另一个是在编辑模式(DataGridTemplateColumn.CellEditingTemplate)中使用:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=.}">
  <DataGrid.Columns>
      <DataGridTemplateColumn Header="Column">
          <DataGridTemplateColumn.CellEditingTemplate>
              <DataTemplate>
                  <TextBox Text="{Binding Path=ColumnName, UpdateSourceTrigger=PropertyChanged}"/>
              </DataTemplate>
          </DataGridTemplateColumn.CellEditingTemplate>
          <DataGridTemplateColumn.CellTemplate>
              <DataTemplate>
                  <TextBlock Text="{Binding Path=ColumnName}"/>
              </DataTemplate>
          </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
  </DataGrid.Columns>
</DataGrid>

您可以按列指定,而不是网格指定,默认情况下,它会在F2上进入编辑模式或双击,但您可以DataGrid.PreviewKeyDownBeginEdit()处理{{} 1}}