我要求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
答案 0 :(得分:3)
您是否尝试过DataGridCell.IsEditing Property?
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="IsEditing" Value="True" />
</Style>
修改强>
您可以将编辑模式设置为DataGrid.CellEditEnding Event至Cancel
的{{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
类型(DataGridTextColumn
,DataGridComboBoxColumn
等...)。
答案 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的编辑模式正常工作要容易得多。