Prism.WPFを使用してデスクトップアプリケーションを作成しています。
DataGridのダブルクリックイベントでPrismのInvokeCommandActionを利用していますが、スクロールバー上でダブルクリックを行ってもイベントが発生してしまいます。
スクロールバー上のイベントを無効化するにはどうすれば良いでしょうか。
以下コードです。
DataGridでPersonオブジェクトを表示し、ダブルクリックするとTextBlockに選択したPersonのNameが表示するようにしています。
xml
1<Window x:Class="DataGridDoubleClick.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:DataGridDoubleClick" 7 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 8 xmlns:prism="http://prismlibrary.com/" 9 prism:ViewModelLocator.AutoWireViewModel="True" 10 mc:Ignorable="d" 11 Title="MainWindow" Height="350" Width="525"> 12 <Grid> 13 <StackPanel> 14 <TextBlock Text="{Binding SelectedNameString}"/> 15 <DataGrid ItemsSource="{Binding Persons}" Height="300"> 16 <i:Interaction.Triggers> 17 <i:EventTrigger EventName="MouseDoubleClick"> 18 <prism:InvokeCommandAction Command="{Binding DoubleClickCommand}" 19 CommandParameter="{Binding SelectedItem, 20 RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"/> 21 </i:EventTrigger> 22 </i:Interaction.Triggers> 23 </DataGrid> 24 </StackPanel> 25 </Grid> 26</Window>
c#
1using System.Linq; 2using System.Collections.ObjectModel; 3using Prism.Commands; 4using Prism.Mvvm; 5 6namespace DataGridDoubleClick 7{ 8 public class MainWindowViewModel : BindableBase 9 { 10 public ObservableCollection<Person> Persons { get; } = new ObservableCollection<Person>(); 11 12 #region SelectedNameStringプロパティ 13 private string _SelectedNameString; 14 public string SelectedNameString 15 { 16 get { return _SelectedNameString; } 17 set { SetProperty(ref _SelectedNameString, value); } 18 } 19 #endregion 20 21 public DelegateCommand<Person> DoubleClickCommand { get; } 22 23 public MainWindowViewModel() 24 { 25 Persons.AddRange(Enumerable.Range(1, 100).Select(x => new Person() 26 { 27 Id = x, 28 Name = "田中太郎" + x.ToString() 29 })); 30 31 DoubleClickCommand = new DelegateCommand<Person>(x => 32 { 33 SelectedNameString = x.Name; 34 }); 35 } 36 } 37 38 public class Person 39 { 40 public int Id { get; set; } 41 public string Name { get; set; } 42 } 43}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。