Bill Zhang のビヘイビアのアイデアに基づいて、制御にとらわれず、再利用できる汎用バージョンを作成しました。必要な組み立ては
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
実行をイベント ハンドラーに渡すトリガー アクションを作成しました。
using System.Windows;
using System.Windows.Input;
using System.Windows.Interactivity;
using System;
namespace Misc
{
public class CommandWithEventAction : TriggerAction<UIElement>
{
public event Func<object, object> Execute;
public static DependencyProperty CommandProperty = DependencyProperty.Register("Command", typeof(ICommand), typeof(CommandWithEventAction), null);
public ICommand Command
{
get
{
return (ICommand)GetValue(CommandProperty);
}
set
{
SetValue(CommandProperty, value);
}
}
public static DependencyProperty ParameterProperty = DependencyProperty.Register("Parameter", typeof(object), typeof(CommandWithEventAction), null);
public object Parameter
{
get
{
return GetValue(ParameterProperty);
}
set
{
SetValue(ParameterProperty, value);
}
}
protected override void Invoke(object parameter)
{
var result = Execute(Parameter);
Command.Execute(result);
}
}
}
カスタム動作のロジックを回避するために、任意のイベントをイベント コールバックにフックし、その後にコマンド呼び出しを行うことができます。
XAML:
<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<misc:CommandWithEventAction Command="{Binding LoadImageCommand}" Parameter="Custom data" Execute="CommandWithEventAction_OnExecute"/>
</i:EventTrigger>
</i:Interaction.Triggers>
Execute
</Button>
これにより、オブジェクトとしてボックス化された「カスタムデータ」文字列が呼び出された関数に渡されます
CommandWithEventAction_OnExecute
その署名はFunc<object,object>
パラメータを使用し、オブジェクトにボックス化されて渡される何かを返す必要がありますLoadImageCommand