##前提
環境:VS2019
言語:C# WPF
フレームワーク:MVVM
##悩んでいる事
DataGridをダブルクリックすると、選択中の明細を開くようにしています。
ただし、選択状態にしておいてヘッダーやスクロールバー、または条件を絞り込んだ状態で明細のない箇所など(つまりはDataGridのコントロールの上ならどこでも)をダブルクリックしても同様に選択したファイルが開いてしまいます。
これに対して、どちらかの対策をとりたいと考えていますが分かりません。
① 明細にフォーカスがあたっている場合にだけダブルクリックのイベントが発火するようにする
(もしくは、ダブルクリックのイベントが発火は許容するとして、明細にフォーカスが当たっている事が検知できればよい)
② 明細以外の箇所をクリックすると、SelectedIndex = -1 とする
できるのであれば、①のように解決したいと思っていますが、実装可能でしょうか?
--追記---
これまでは、以下のようなビヘイビア(?)を使用して、ダブルクリックを検知してVMのコマンドを実行していました。
C#
1public class MouseDoubleClick 2{ 3 #region 依存関係プロパティ 4 public static DependencyProperty CommandProperty = 5 DependencyProperty.RegisterAttached("Command", 6 typeof(ICommand), 7 typeof(MouseDoubleClick), 8 new UIPropertyMetadata(CommandChanged)); 9 public static DependencyProperty CommandParameterProperty = 10 DependencyProperty.RegisterAttached("CommandParameter", 11 typeof(object), 12 typeof(MouseDoubleClick), 13 new UIPropertyMetadata(null)); 14 #endregion 15 16 #region イベントハンドラ 17 /// <summary> 18 /// 19 /// </summary> 20 /// <param name="sender"></param> 21 /// <param name="e"></param> 22 private static void OnMouseLeftDoubleClick(object sender, MouseButtonEventArgs e) 23 { 24 if (e.ChangedButton != MouseButton.Left) return; 25 26 var control = sender as Control; 27 var command = (ICommand)control.GetValue(CommandProperty); 28 var commandParameter = control.GetValue(CommandParameterProperty); 29 command.Execute(commandParameter); 30 } 31 #endregion 32 33 #region メソッド 34 /// <summary> 35 /// 36 /// </summary> 37 /// <param name="target"></param> 38 /// <param name="value"></param> 39 public static void SetCommand(DependencyObject target, ICommand value) 40 { 41 target.SetValue(CommandProperty, value); 42 } 43 /// <summary> 44 /// 45 /// </summary> 46 /// <param name="target"></param> 47 /// <param name="value"></param> 48 public static void SetCommandParameter(DependencyObject target, object value) 49 { 50 target.SetValue(CommandParameterProperty, value); 51 } 52 /// <summary> 53 /// 54 /// </summary> 55 /// <param name="target"></param> 56 /// <returns></returns> 57 public static object GetCommandParameter(DependencyObject target) 58 { 59 return target.GetValue(CommandParameterProperty); 60 } 61 /// <summary> 62 /// 63 /// </summary> 64 /// <param name="target"></param> 65 /// <param name="e"></param> 66 private static void CommandChanged(DependencyObject target, DependencyPropertyChangedEventArgs e) 67 { 68 var control = target as Control; 69 if (control != null) 70 { 71 if ((e.NewValue != null) && (e.OldValue == null)) 72 { 73 control.MouseDoubleClick += OnMouseLeftDoubleClick; 74 } 75 else if ((e.NewValue == null) && (e.OldValue != null)) 76 { 77 control.MouseDoubleClick -= OnMouseLeftDoubleClick; 78 } 79 } 80 } 81 #endregion 82}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/11 08:36
2019/08/11 08:40
2019/08/11 08:54
2019/08/11 10:19
2019/08/11 10:29