ルーティング イベントが登録された 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));
}
このユーザーコントロールをメインビュー内に次のように埋め込みます。
Title="MainWindow" Height="350" Width="525">
<Grid>
<historicChart:HistoricChartControl></historicChart:HistoricChartControl>
</Grid>
このイベントが発生したときに Viewmodel からメソッドを呼び出して、カスタム ルーティング イベントを処理したいと考えています。
私は最初にこれを試しました:
<Grid>
<historicChart:HistoricChartControl behaviours:ChartBehavior.OnVisualChartRangeChanged="VisualChartRangeChanged"/>
</Grid>
ただし、ハンドラー メソッド (VisualChartRangeChanged) が Viewmodel ではなく View に配置されるため、MVVM に逆らう必要があります。
次に、これを試しました:
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) は呼び出されていません。
誰かがこれがどのように行われるかの例を提供できますか?
ありがとう。
編集済み
そこで、次のようにコードを修正しました。
<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.OnVisualChartRangeChanged' は、プロパティ 'EventName' の有効な値ではありません。"}
メイン ビューのビューモデルでハンドラー メソッドを呼び出して、ユーザー コントロールからルーティング イベントを処理するためのより良い方法はありますか?