2016-12-29 3 views
0

Ich benutze System.Windows.Interactivity und ich muss eine Nachricht auf Mauseingabe Ereignis anzeigen. Das Problem ist das gleiche Ereignis wird aufgerufen, wenn außerhalb der ListView getan, aber es wird nicht aufgerufen, wenn in der ListView.Warum wird das Mausereignis nicht ausgelöst, wenn man sich in der Listenansicht befindet?

Ich habe versucht, so mit mvvm Ansatz tun:

<Grid> 
    <StackPanel Grid.Row="1" Grid.Column="1" Name="events1"> 
     //This Event works outside the ListView but not inside ListView 
     <Rectangle Fill="Yellow" Stroke="Black" Width="100" Height="30"> 
      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="MouseEnter"> 
        <i:InvokeCommandAction Command="{Binding SomeCommand}" /> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 
     </Rectangle> 
     <ListView BorderBrush="#FF1D93E4" BorderThickness="4" Behaviour:GridViewColumnResize.Enabled="True" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectedItem="{Binding SelectedItem ,Mode=TwoWay}" ItemsSource="{Binding Ur1r2_Obj}" HorizontalContentAlignment="Stretch"> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
       </Style> 
      </ListView.ItemContainerStyle> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="State" Behaviour:GridViewColumnResize.Width="*"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Grid Background="{Binding Converter={StaticResource colorToBrushConverter}}"> 
            //The event do not work here 
            <i:Interaction.Triggers> 
             <i:EventTrigger EventName="MouseEnter"> 
              <i:InvokeCommandAction Command="{Binding SomeCommand}" /> 
             </i:EventTrigger> 
            </i:Interaction.Triggers> 

            <Button Margin="35,0,0,0" HorizontalAlignment="Center" Content="{Binding Path=Etat, Mode=OneWay}" Background="{Binding Converter={StaticResource colorToBrushConverter}}" /> 
           </Grid> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </StackPanel> 
</Grid> 

Im Hinblick Modell

private ICommand someCommand; 
     public ICommand SomeCommand 
     { 
      get 
      { 
       //return plotButton; 
       return someCommand ?? (someCommand = new CommandHandler(() => MyAction2(), _canExecute)); 
      } 
      set 
      { 
       someCommand = value; 
       OnPropertyChanged("SomeCommand"); 

      } 
     } 

     private void MyAction2() //Messsage is popuped on Moseenter event when i try to hover mouse over rectangle outside the listview , But not get called when inside the Listview 
     { 
      MessageBox.Show("Yeah Called"); 
     } 

Warum es Ereignis nicht aus dem Innern des Listview genannt wird. Wie man es anruft?

Antwort

0

Wenn Sie versuchen, den gleichen Befehl (einKommando) aufrufen Sie eine Relative der Bindung angeben sollten:

<Grid Background="{Binding Converter={StaticResource colorToBrushConverter}}"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="MouseEnter"> 
      <i:InvokeCommandAction Command="{Binding DataContext.SomeCommand, 
                RelativeSource={RelativeSource AncestorType=ListView}}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
    <Button Margin="35,0,0,0" HorizontalAlignment="Center" Content="{Binding Path=Etat, Mode=OneWay}" Background="{Binding Converter={StaticResource colorToBrushConverter}}" /> 
</Grid> 

Die Datacontext eines Elements im Listview ist ein Objekt in Ihrem „Ur1r2_Obj“ Itemssource während Der DataContext des Rectangle ist Ihr Ansichtsmodell. Deshalb schlägt die Bindung in Ihrem CellTemplate fehl.

+0

Vielen Dank. –

+0

Vielen Dank. Aber wie bekomme ich die Daten, die dieser Zeile entsprechen? –

+0

Sie können das Objekt in ItemsSource als CommandArgument an den folgenden Befehl übergeben: mm8

Verwandte Themen