2012-05-17 4 views
1

У меня есть требование постоянно держать datagridcell в режиме редактирования. Я не могу найти какой-либо вариант для создания режима редактирования ячейки datagrid, поэтому я взял TextBox в ячейке datagrid с помощью шаблона управления.WPF dataGgridCell Режим редактирования

Я могу писать в текстовом поле, но содержимое ячейки datagrid никогда не обновляется. Как я могу обновить содержимое ячеек данных в любом текстовом поле? Вот стиль:

<Style TargetType="{x:Type DataGridCell}" x:Key="DatagridCellWithTextbox"> 
      <Setter Property="BorderThickness" Value="2"></Setter> 
      <Setter Property="Foreground" Value="{DynamicResource ContentNormalBrush}"/> 
      <Setter Property="Margin" Value="0"></Setter> 
      <Setter Property="VerticalContentAlignment" Value="Center"></Setter> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type DataGridCell}"> 
         <Grid Background="{TemplateBinding Background}"> 
          <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
          <TextBox x:Name="txtCell" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text}" VerticalContentAlignment="Top" Focusable="True" /> 
          </Border> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      </Style> 

Благодаря Ди

ответ

2

Вы пробовали DataGridCell.IsEditing Property?

<Style TargetType="{x:Type DataGridCell}"> 
    <Setter Property="IsEditing" Value="True" /> 
</Style> 

Edit:

Вы можете держать в режиме редактирования настройки Cancel свойства в DataGrid.CellEditEnding Event для True.

<DataGrid CellEditEnding="DataGrid_CellEditEnding" 

.

private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
{ 
    e.Cancel = true; 
} 
+0

Я попытался, но когда я закончил с редактированием, он вернется в режим без редактирования. Я хочу держать его всегда в режиме редактирования. – Dee

+0

Сначала я думал, что он восстановит установщик стиля, возможно, его даже можно было бы сделать с помощью триггера стиля для триггера, всегда верного, но лучше попробуйте мое новое предложение в моем редактировании. – LPL

0

Я знаю, что этот вопрос старый, но недавно я разработал свое собственное решение.

Все, что я сделать, это унаследовать от DataGridTextColumn и переопределить метод GenerateElement:

public class EditingTextBoxColumn : DataGridTextColumn 
{ 
    protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) 
    { 
     var textbox = base.GenerateEditingElement(cell, dataItem) as TextBox; 
     textbox.IsReadOnly = IsReadOnly; 
     return textbox; 
    } 
} 

Это будет работать для других типов столбца, а также. Конечно, это работает только для DataGridColumn типов, которые уже существуют (DataGridTextColumn, DataGridComboBoxColumn и т. Д.).

Смежные вопросы