0

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

我的 xml 看起来像这样:

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

1 回答 1

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()Enter

于 2013-06-03T14:41:39.510 回答