双击datagrid时出现问题
我在C#代码中的数据网格上有以下内容:
除非用户首先选择行(单击)然后尝试双击该行,否则它大部分都有效。 在这种情况下,CmdTransUnitFillerRowDblClick代码永远不会被触发进行处理。
那么,当行已被选中时,如何在双击时正确触发CmdTransUnitFillerRowDblClick?
有人可能会问:
private void ExecutecmdTransUnitFillerRowDblClick(object parameter) { if (DgTransUnitFillerSelectedItem != null) TransUnitFillerDoubleClick(DgTransUnitFillerSelectedItem.CollectionRowId); }
请参阅我对其他相关问题的回答 。 问题是数据网格在用户选择行(或实际上是单元格)之后不再具有焦点; 用户在数据网格中单击的单元格。 因此,您必须将焦点更改回datagrid以允许此操作。
更改:
至:
…并添加:
private void ExecutecmdTransUnitFillerRowClick(object parameter) { if (DgTransUnitFillerSelectedItem != null) The_Name_Of_Your_DataGrid.Focus(); }
在现有的InputBinding之上,您可以使用Style将InputBinding附加到每个单元格:
这需要从这里使用MouseCommands类。
public static class MouseCommands { private static void LeftDoubleClickChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) { var control = (Control)sender; if (args.NewValue != null && args.NewValue is ICommand) { var newBinding = new MouseBinding(args.NewValue as ICommand, new MouseGesture(MouseAction.LeftDoubleClick)); control.InputBindings.Add(newBinding); } else { var oldBinding = control.InputBindings.Cast().First(b => b.Command.Equals(args.OldValue)); control.InputBindings.Remove(oldBinding); } } public static readonly DependencyProperty LeftDoubleClickProperty = DependencyProperty.RegisterAttached("LeftDoubleClick", typeof(ICommand), typeof(MouseCommands), new UIPropertyMetadata(LeftDoubleClickChanged)); public static void SetLeftDoubleClick(DependencyObject obj, ICommand value) { obj.SetValue(LeftDoubleClickProperty, value); } public static ICommand GetLeftDoubleClick(DependencyObject obj) { return (ICommand)obj.GetValue(LeftDoubleClickProperty); } }
虽然我认为更简洁的方法是在代码隐藏中处理MouseDoubleClick事件,并通过直接调用ViewModel或在命令上调用.Execute()来手动提升Command执行。