WPF dataGgridCell编辑模式

时间:2012-05-17 15:19:29

标签: wpf datagridcell editmode

我要求datagridcell始终处于编辑模式。我没有找到任何选项来进行datagrid单元格编辑模式,所以我使用控件模板在datagrid单元格下使用了TextBox。

我能够在文本框中书写,但数据网格单元格内容永远不会更新。如何用文本框中写的内容更新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>

由于 DEE

3 个答案:

答案 0 :(得分:3)

您是否尝试过DataGridCell.IsEditing Property

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

修改

您可以将编辑模式设置为DataGrid.CellEditEnding EventCancel的{​​{1}}属性。

True

<DataGrid CellEditEnding="DataGrid_CellEditEnding"

答案 1 :(得分:1)

我知道这个问题已经过时了,但我最近已经开发了自己的解决方案。

我所做的就是继承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类型(DataGridTextColumnDataGridComboBoxColumn等...)。

答案 2 :(得分:0)

我知道这很老了,但我想我有一个更好的答案。使用只读的DataGridTemplateColumn并设置CellTemplate。绑定在CellTemplate中无法正常工作,但是您可以使用其他RelativeSource来解决此问题:

<DataGridTemplateColumn Width="Auto" Header="Select" IsReadOnly="True">
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate DataType="models:DealAcctListItem">
      <CheckBox IsChecked="{Binding RelativeSource=
                           {RelativeSource AncestorType=DataGridCell}, 
                           Path=DataContext.IsSelected}" />
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

这比尝试使DataGrid的编辑模式正常工作要容易得多。