我有一个datacontrolgrid,它有三列,绑定到一个列表,还有一个clickevent(但我需要将它与键盘上的一个键结合起来才能编辑选定的单元格/列)。我只想编辑其中一列,因此在 xaml 文件中的特定列标记中有一个 EditTemplate,其数据模板包含一个带有 keydown 事件的文本框,我在该实体上设置值,然后在数据库中插入/更新它。
在单击方法中,我还检查是否按下了特定键,如果是,我调用 BeginEdit 和 Focus。但似乎 EndEdit 永远不会被调用,因为在第一个编辑的单元格之后,数据网格总是将标志 isbeingedited 设置为 true,并且它以某种方式阻止我再次编辑。有没有办法在只听回车键的 keydown 方法中提交编辑?
XAML
<xcdg:DataGridControl Grid.Row="1"
VerticalAlignment="Top"
MouseRightButtonUp="MyMethod_RightClick"
ItemsSource="{Binding ListOfObjects}"
AutoCreateColumns="False"
Height="1000"
NavigationBehavior="RowOnly">
<xcdg:DataGridControl.Columns>
<xcdg:Column FieldName="Name" IsMainColumn="False" MinWidth="500">
<xcdg:Column.CellEditor>
<xcdg:CellEditor>
<xcdg:CellEditor.EditTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtbox" KeyDown="txtbox_KeyDown" Text="{xcdg:CellEditorBinding}" />
</StackPanel>
</DataTemplate>
</xcdg:CellEditor.EditTemplate>
</xcdg:CellEditor>
</xcdg:Column.CellEditor>
XAML 代码隐藏
private void MyMethod_RightClick(object sender, RoutedEventArgs e)
{
DataGridControl dataGrid = (DataGridControl)sender;
MyObj myObj = (MyObj)dataGrid.CurrentItem;
if (Keyboard.IsKeyDown(Key.E))
{
//i'm coming here all times i'm trying to edit records in one column but i'm only able to edit the first time i'm trying.
dataGrid.BeginEdit();
dataGrid.Focus();
return;
}
//in case of no edit i do some other stuff...
}
private void txtbox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Enter) return;
var txtboxvalue = ((TextBox)sender).DataContext.ToString();
//do stuff and
//set value on entity property and update record in db...
}