2016-10-11 5 views
4

Я пытаюсь связать событие DataClick элемента декартовой диаграммы LiveChart с использованием шаблона MVVM.Связывание пользовательских событий пользовательских элементов в шаблоне MVVM

У меня есть Charts.xml так:

<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> 

Это мой ICommand ChartDataClick на мой ViewModel:

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

      return _dataClickCommand; 
     } 
    } 

Если я переключаюсь, например, "DataClick" для "MouseEnter" Я получаю мой команда запущена.

Поэтому я предполагаю, что проблема заключается в том, что DataClick является настраиваемым событием.

Кто-нибудь знает обходное решение для этого? я действительно пытался все, что мог найти на Google, которые могли бы помочь, но ничего до сих пор ...

LiveCharts События: Events Documentation

+1

это, наконец, поддерживается ... https://github.com/beto-rodriguez/Live-Charts/issues/42 –

ответ

2

EventTrigger не различает.

Мы можем проверить это, осуществив MyButtonSimple, у которого есть пользовательское маршрутизируемое событие Tap.

Мы можем перейти от обработчика в коде позади

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

К 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> 

И все работает, как ожидалось

Недостатком этих триггеров является то, что они должны быть помещенный на UIElement, поднимающий событие. Другими словами, они игнорируют события Bubbling или Tunneling. нет, поэтому нет Interaction.Triggers альтернатива:

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

Подводя итог, то DataClick событие не поднимается на CartesianChart (но дальше вниз логического дерева), и поэтому вы не можете справиться с этим таким образом.

+0

Так что я не смогу обработать это событие так, как это кодируется прямо сейчас? Или вы думаете, что это возможно с помощником или чем-то еще? Если я изменю код LiveCharts для создания маршрутизируемого события DataClick, это изменит ситуацию? –