【问题标题】:Prevent jumping to next row when user hits Enter in RadGridView当用户在 RadGridView 中按 Enter 时,防止跳转到下一行
【发布时间】:2020-07-27 13:24:34
【问题描述】:

我有一个来自 Telerik UI 的用于 WPF 的RadGridView,带有一个可编辑的列。当用户编辑该列中的单元格并点击 Enter 时,网格中下一行中的同一单元格将获得焦点。

我希望用户刚刚编辑的单元格失去焦点。如何做到这种 MVVM 风格?

【问题讨论】:

  • 这个和MVVM无关,问题是View only,所以在View里面处理就行了

标签: wpf .net-core datagrid telerik lost-focus


【解决方案1】:

您可以通过编写自定义键盘命令提供程序来更改此行为。此提供程序会覆盖默认的 Enter 按下操作。它通过将SelectedItem 设置为null 来提交编辑并取消选择单元格。

public class CustomKeyboardCommandProvider : DefaultKeyboardCommandProvider
{
   private readonly GridViewDataControl _grid;

   public CustomKeyboardCommandProvider(GridViewDataControl grid)
      : base(grid)
   {
      _grid = grid;
   }

   public override IEnumerable<ICommand> ProvideCommandsForKey(Key key)
   {
      var commands = base.ProvideCommandsForKey(key).ToList();

      if (key != Key.Enter)
         return commands;

      commands.Clear();
      commands.Add(RadGridViewCommands.CommitEdit);

      _grid.SelectedItem = null;

      return commands;
   }
}

您必须分配新的提供者。最简单的方法是在代码隐藏中,因为它有一个构造函数参数。

MyRadDataGridView.KeyboardCommandProvider = new CustomKeyboardCommandProvider(TestGridView);

或者,创建一个TriggerAction&lt;RadGridView&gt; 并将其附加到网格视图的Loaded 事件。

public class SetCustomKeyboardCommandProviderAction : TriggerAction<RadGridView>
{
   protected override void Invoke(object parameter)
   {
      AssociatedObject.KeyboardCommandProvider = new CustomKeyboardCommandProvider(AssociatedObject);
   }
}
<telerik:RadGridView>
   <b:Interaction.Triggers>
      <b:EventTrigger EventName="Loaded">
         <local:SetCustomKeyboardCommandProviderAction/>
      </b:EventTrigger>
   </b:Interaction.Triggers>
   <!-- ...other definitions. -->
</telerik:RadGridView>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2012-11-01
    • 2017-11-22
    • 1970-01-01
    相关资源
    最近更新 更多