Значение события щелчка диаграммы Silverlight Telerik Chart в качестве параметра Command - PullRequest
0 голосов
/ 21 июня 2011

У меня есть Telerik Silverlight RadChart, и я хотел бы захватить событие ItemClick, когда пользователь нажимает на одну из полос и передает базовое значение в ViewModel с помощью MVVMLight RelayCommand.

Проблема Iесть то, что я не знаю, как передать значение в CommandParameter.

XAML

<telerik:RadChart x:Name="Chart" Grid.Row="1" ItemsSource="{Binding Path=ConcernsCounts}">
    <telerik:RadChart.SeriesMappings>
        <telerik:SeriesMapping>
            <telerik:SeriesMapping.SeriesDefinition>
                <telerik:BarSeriesDefinition ShowItemToolTips="True" />
            </telerik:SeriesMapping.SeriesDefinition>
            <telerik:ItemMapping FieldName="ConcernsCount" DataPointMember="LegendLabel"/>
            <telerik:ItemMapping FieldName="BusinessUnit" DataPointMember="XCategory"/>
            <telerik:ItemMapping FieldName="ConcernsCount" DataPointMember="Label"/>
            <telerik:ItemMapping FieldName="ConcernsCount" DataPointMember="YValue"/>
        </telerik:SeriesMapping>
    </telerik:RadChart.SeriesMappings>
    <telerik:RadChart.DefaultView>
        <telerik:ChartDefaultView>
            <telerik:ChartDefaultView.ChartTitle>
                <telerik:ChartTitle Content="PLM Concerns By Business Unit" HorizontalAlignment="Center"/>                           
            </telerik:ChartDefaultView.ChartTitle>
            <telerik:ChartDefaultView.ChartLegend>
                <telerik:ChartLegend x:Name="ChartLegend" UseAutoGeneratedItems="True" Visibility="Collapsed"/>
            </telerik:ChartDefaultView.ChartLegend>                   
            <telerik:ChartDefaultView.ChartArea>
                <telerik:ChartArea LegendName="ChartLegend" Name="BusinessChartArea">
                    <telerik:ChartArea.AxisX>
                        <telerik:AxisX LabelRotationAngle="45"/>
                    </telerik:ChartArea.AxisX>
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="ItemClick">
                            <cmd:EventToCommand Command="{Binding LoadDetails}" CommandParameter="{Binding ?????? />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                </telerik:ChartArea>
            </telerik:ChartDefaultView.ChartArea>
        </telerik:ChartDefaultView>
    </telerik:RadChart.DefaultView>
</telerik:RadChart>

Я могу зафиксировать событие в коде позади, но предпочел бы выполнить задачу в упрощенном порядке

Код позади

Partial Public Class ConcernsView
    Inherits Page

    Public Sub New()
        InitializeComponent()


        ' Add any initialization after the InitializeComponent() call.
        AddHandler Chart.DefaultView.ChartArea.ItemClick, Sub(s, e) stopMe(s, e)
    End Sub

    'Executes when the user navigates to this page.
    Protected Overrides Sub OnNavigatedTo(ByVal e As System.Windows.Navigation.NavigationEventArgs)

    End Sub

    Private Function stopMe(ByVal sender As Object, ByVal e As Telerik.Windows.Controls.Charting.ChartItemClickEventArgs) As Object
        Dim sss As String
        sss = e.DataPoint.XCategory
        Stop
    End Function

End Class

Любая идея, как это сделать в привязке команд ??

Спасибо

Фил

1 Ответ

0 голосов
/ 21 сентября 2011

Работает ли настройка PassEventArgsToCommand = "True" для ваших нужд?Например:

<i:EventTrigger EventName="ItemClick">
    <cmd:EventToCommand Command="{Binding LoadDetails}" PassEventArgsToCommand="True" />
</i:EventTrigger>

Если вы не хотите иметь ссылку на сборки Telerik, где бы ни была определена ваша ViewModel, вы можете использовать обработчик, использующий динамический объект вместо этого:

public void MyCommandHandler(dynamic args) { }

Я использую этот трюк, чтобы мои проекты были "чистыми".Теперь вы можете называть все, что вам нужно в аргументах, не ссылаясь ни на что, «Telerik».

...