2016-10-11 1 views
4

J'essaie de lier l'événement "DataClick" de l'élément Chart cartésien de LiveChart à l'aide du modèle MVVM.Liaison d'événements personnalisés d'éléments personnalisés dans MVVM Pattern

J'ai mon Charts.xml comme ceci:

<ContentControl Grid.Row="0"> 
     <lvc:CartesianChart x:Name="ContrastChart" Series="{Binding ContrastSeriesCollection}"> 
      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="DataClick"> 
        <i:InvokeCommandAction Command="{Binding ChartDataClick}" /> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 
     </lvc:CartesianChart> 
    </ContentControl> 

Ceci est mon ICommand ChartDataClick sur mon ViewModel:

 public ICommand ChartDataClick { 
     get 
     { 
      if(_dataClickCommand == null) 
      { 
       _dataClickCommand = new DelegateCommand( 
        () => 
        { 
         MessageBox.Show("Data Clicked!"); 
        } 
        ); 
      } 

      return _dataClickCommand; 
     } 
    } 

Si je passe par exemple "DataClick" pour "MouseEnter" Je reçois mon commandement tiré. Donc, je suppose que le problème est que le DataClick est un événement personnalisé.

Quelqu'un sait une solution de contournement pour cela? Je vraiment tout essayé je pouvais trouver sur Google qui pourrait aider, mais rien jusqu'à présent ...

Livecharts Événements: Events Documentation

+1

cela est enfin pris en charge ... https://github.com/beto-rodriguez/Live-Charts/issues/42 –

Répondre

2

Le EventTrigger ne fait aucune discrimination.

Nous pouvons vérifier cela en implémentant MyButtonSimple qui a un événement routé personnalisé Tap.

Nous pouvons aller de gestionnaire dans le code derrière

<custom:MyButtonSimple 
    x:Name="mybtnsimple" Tap="mybtnsimple_Tap" 
    Content="Click to see Tap custom event work"> 
</custom:MyButtonSimple> 

Pour un ViewModel ICommand

<custom:MyButtonSimple 
    x:Name="mybtnsimple" 
    Content="Click to see Tap custom event work"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Tap"> 
      <i:InvokeCommandAction Command="{Binding Command}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</custom:MyButtonSimple> 

Et tout fonctionne comme prévu

L'inconvénient de ces déclencheurs est qu'ils doivent être placé sur le UIElement soulevant l'événement. En d'autres termes, ils ignorent les événements Bubbling ou Tunneling. Voilà pourquoi il n'y a pas Interaction.Triggers alternative:

<Grid custom:MyButtonSimple.Tap="mybtnsimple_Tap"> 
    <custom:MyButtonSimple 
     x:Name="mybtnsimple" 
     Content="Click to see Tap custom event work"> 
    </custom:MyButtonSimple> 
</Grid> 

Pour résumer, l'événement DataClick ne se pose pas sur le CartesianChart (mais plus bas de l'arborescence logique) et vous ne pouvez donc gérer cette façon.

+0

Donc je ne serai pas capable de gérer cet événement la façon dont il est codé en ce moment? Ou pensez-vous est possible avec une aide ou quelque chose? Si je change le code de LiveCharts pour produire un événement 'DataClick' routé ferait une différence? –