前提・実現したいこと
WPF+Prism+MVVMでTreeViewを表示するプログラムを作成しています。
TreeViewで表示した項目(TextBlock)に対して左クリックを押下した時のイベントを補足したいのですが、
EventTriggerを設定しても補足できません。
xaml
1<Window x:Class="T001.Views.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:prism="http://prismlibrary.com/" 5 prism:ViewModelLocator.AutoWireViewModel="True" 6 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 7 Title="T001App" Height="480" Width="640" 8 WindowStartupLocation="CenterScreen"> 9<Grid> 10<TreeView> 11 <TreeViewItem Header="TreeHeader" ItemsSource="{Binding DataList}"> 12 <TreeViewItem.ItemTemplate> 13 <DataTemplate> 14 <TextBlock Text="{Binding Name}"> 15 <i:Interaction.Triggers> 16 <i:EventTrigger EventName="PreviewMouseLeftButtonDown"> 17 <prism:InvokeCommandAction Command="{Binding PreMouseLBtnDownDSCmd}"/> 18 </i:EventTrigger> 19 </i:Interaction.Triggers> 20 </TextBlock> 21 </DataTemplate> 22 </TreeViewItem.ItemTemplate> 23 </TreeViewItem> 24</TreeView> 25</Grid> 26</Window>
C#
1namespace T001.ViewModels 2{ 3 public class MainWindowViewModel : BindableBase 4 { 5 private ObservableCollection<Data> _dataList = new ObservableCollection<Data>(); 6 public ObservableCollection<Data> DataList 7 { 8 get { return _dataList ; } 9 set { SetProperty(ref _dataList , value); } 10 } 11 12 public DelegateCommand<MouseButtonEventArgs> PreMouseLBtnDownDSCmd { get; private set; } 13 14 public MainWindowViewModel() 15 { 16 //データを作る 17 DataList = new ObservableCollection<Data>(); 18 for(int i = 0 ; i < 5; i ++){ 19 Data data = new Data(); 20 data.Name = i; 21 22 DataList.Add(data); 23 } 24 25 //コマンドにメソッドを登録 26 PreMouseLBtnDownDSCmd = new DelegateCommand<MouseButtonEventArgs>(PreMouseLBtnDownDS); 27 } 28 29 private void PreMouseLBtnDownDS(MouseButtonEventArgs e) 30 { 31 //ここに入ってこない! 32 ; 33 } 34 } 35 36 public class Data 37 { 38 public string Name { get; set; } 39 } 40}
試したこと
- コードビハインド
以下のように、<TextBlock>に直接イベントを登録すると、イベントハンドラで補足できました。
ですが、MVVMで作成したいため、コードビハインドは出来るだけ使用したくありません。
xaml
1 <TextBlock Text="{Bindnig Name}" PreviewMouseLeftButtonDown="OnMouseEvent" />
C#
1namespace T001.Views 2{ 3 /// <summary> 4 /// Interaction logic for MainWindow.xaml 5 /// </summary> 6 public partial class MainWindow : Window 7 { 8 public MainWindow() 9 { 10 InitializeComponent(); 11 } 12 13 private void OnMouseEvent(object sender, MouseButtonEventArgs e) 14 { 15 //ここには入ってきます。 16 ; 17 } 18 } 19}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/01 01:40
2020/08/01 01:50
2020/08/01 02:21
2020/08/01 02:40