У меня есть UserControl с зарегистрированным перенаправленным событием:Как использовать CallMethodAction для вызова метода внутри модели просмотра, когда пользовательское маршрутизируемое событие запускается из usercontrol?
public static readonly RoutedEvent OnVisualChartRangeChangedEvent =
EventManager.RegisterRoutedEvent("OnVisualChartRangeChanged",
RoutingStrategy.Bubble, typeof(OnScrollChangedHandler), typeof(ChartBehavior));
public event OnScrollChangedHandler OnVisualChartRangeChanged
{
add { AssociatedObject.AddHandler(OnVisualChartRangeChangedEvent, value); }
remove { AssociatedObject.RemoveHandler(OnVisualChartRangeChangedEvent, value); }
}
Я сгореть это маршрутизируемое событие из пользовательского элемента управления, как это:
protected virtual void OnScrollEvent(object oldValue, object newValue)
{
AssociatedObject.RaiseEvent(new DateTimeEventArgs(OnVisualChartRangeChangedEvent, minDate, maxDate));
}
Я вложу это UserControl в моем главном экране, как это:
Title="MainWindow" Height="350" Width="525">
<Grid>
<historicChart:HistoricChartControl></historicChart:HistoricChartControl>
</Grid>
и я хотел бы обработать настраиваемое маршрутизируемое событие, вызвав метод из моей модели просмотра, когда это событие запущено.
Я попробовал это на первый:
<Grid>
<historicChart:HistoricChartControl behaviours:ChartBehavior.OnVisualChartRangeChanged="VisualChartRangeChanged"/>
</Grid>
, но это требует, чтобы я идти против MVVM так как метод обработчика (VisualChartRangeChanged) будут размещены в представлении, а не в ViewModel.
Затем я попытался это:
Title="MainWindow" Height="350" Width="525">
<Grid>
<!--behaviours:ChartBehavior.OnVisualChartRangeChanged="RoutedEventHandler"-->
<historicChart:HistoricChartControl>
<i:Interaction.Triggers>
<i:EventTrigger EventName="OnVisualChartRangeChanged">
<ei:CallMethodAction TargetObject="{Binding}" MethodName="MyMethod"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</historicChart:HistoricChartControl>
</Grid>
но метод обработчика событий (MyMethod) не вызывается.
Может ли кто-нибудь указать пример, как это делается?
Спасибо.
EDITED
Так что я изменил код следующим образом:
<i:Interaction.Triggers>
<i:EventTrigger EventName="{x:Static behaviours:ChartBehavior.OnVisualChartRangeChangedEvent}">
<ei:CallMethodAction TargetObject="{Binding}" MethodName="MyMethod"/>
</i:EventTrigger>
</i:Interaction.Triggers>
не только я вижу это: http://i.stack.imgur.com/xR9DY.jpg
, но даже если он компилируется, несмотря на уведомление изображенном я получить это внутреннее исключение:
{"'ChartBehavior.OnVisu alChartRangeChanged 'не является допустимым значением для свойства EventName. "}
Есть ли лучший способ обработки маршрутизируемого события из usercontrol путем вызова метода обработчика в режиме просмотра основного вида?
Попробуйте что-то вроде этого '' для вашего 'i: EventTrigger'. –
sthotakura
Можете ли вы уточнить? Я сделал это и выбросил исключение: – guerillacodester
вместо этого '', попробуйте код из моего пред. комментарий. И что было исключением? –
sthotakura