2017-02-22 4 views
0

標準の画像コントロールでマウスのダブルクリックを達成するために対話機能を使用しようとしています。 ImageControlはUserControl上にあり、マウスのダブルクリックを処理するメソッドはビューモデル上にあります。WPF:インタラクションを使用して画像をマウスでダブルクリック

1)ユーザーコントロール:

<ItemsControl Grid.Row="0" ItemsSource="{Binding SelectedEventPhotoList}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch"     
      Name="SelectedListView"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Rows="1" Columns="3"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Image Source="{Binding}" Stretch="None"> 
       <i:Interaction.Triggers> 
        <i:EventTrigger EventName="MouseDoubleClick"> 
         <ei:CallMethodAction MethodName="DblClick" TargetObject="{Binding}"/> 
        </i:EventTrigger> 
       </i:Interaction.Triggers> 
      </Image> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

3)ビューモデル:コードは以下の通りである

public void DblClick() 
{ 
    MessageBox.Show("Double click!"); 
} 

しかし、それは動作しません。

UPDATE:

私はこれをしなかったが、それは動作しません:

1)XAML:

<ItemsControl Grid.Row="0" ItemsSource="{Binding SelectedEventPhotoList}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch"     
      Name="SelectedListView"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Rows="1" Columns="3"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
       <Image Source="{Binding}"> 
        <Image.InputBindings> 
         <MouseBinding MouseAction="LeftDoubleClick" Command="{Binding MouseDoubleClickCommand}"/> 
        </Image.InputBindings> 
       </Image> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

2)ビューモデル:

public DelegateCommand MouseDoubleClickCommand { get; private set; } 

コンストラクタで:

MouseDoubleClickCommand = new DelegateCommand(DblClick); 

て、コメントを追加する方法:

public void DblClick() 
{ 
    MessageBox.Show("Double click!"); 
} 

答えて

1

Imageクラスは何MouseDoubleClickイベントがありませんが、あなたはICommandプロパティにバインドInputBindingを使用することができます。

<Image Source="pic.png"> 
    <Image.InputBindings> 
     <MouseBinding MouseAction="LeftDoubleClick" Command="{Binding MouseDoubleClickCommand}"/> 
    </Image.InputBindings> 
</Image> 

public ICommand MouseDoubleClickCommand { get; } = new DelegateCommand<object>(obj => { MessageBox.Show(""); }); 

あなたが必要となりますICommandインターフェイスの実装を提供するか、他の誰かを使用する's。 DelegateCommand<T>クラスは、プリズム内で提供されています:https://www.nuget.org/packages/Prism.Wpf/

コマンドとどのようにMVVMデザインパターンを使用してイベントを処理するための詳細については、次のブログ記事を参照してください:https://blog.magnusmontin.net/2013/06/30/handling-events-in-an-mvvm-wpf-application/

編集:

場合コマンドはItemsControl自体のDataContextすなわち、ビューモデルで定義されている、あなたはそれに結合することができるようにRelativeSourceを使用する必要があります。

<DataTemplate> 
    <Image Source="{Binding}"> 
     <Image.InputBindings> 
      <MouseBinding MouseAction="LeftDoubleClick" 
          Command="{Binding DataContext.MouseDoubleClickCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"/> 
     </Image.InputBindings> 
    </Image> 
</DataTemplate> 
+0

動作しません。元の投稿の更新セクションを見て、私が行ったことを見てください。 – tesicg

+0

ところで、私はプリズムを使用します。 – tesicg

+0

私の編集を参照してください。おそらくRelativeSourceを使用してコマンドにバインドする必要があります。 – mm8

関連する問題