コピーアンドペーストコマンドはテキストボックスで処理されるため、パラメータは厳密には渡されませんが、何を取得しているのかはわかります。
私はハックを使用してこれを行います-そしてそのように添付されたプロパティ
public class AttachableParameter : DependencyObject {
public static Object GetParameter(DependencyObject obj) {
return (Object)obj.GetValue(ParameterProperty);
}
public static void SetParameter(DependencyObject obj, Object value) {
obj.SetValue(ParameterProperty, value);
}
// Using a DependencyProperty as the backing store for Parameter. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ParameterProperty =
DependencyProperty.RegisterAttached("Parameter", typeof(Object), typeof(AttachableParameter), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits));
}
次にxamlで
<ListBox local:AttachableParameter.Parameter="{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}" />
これにより、パラメータが選択されたアイテムになります
次に、コマンドがウィンドウで起動したら、これを使用してコマンドパラメータが存在するかどうかを確認します(これをcanexecuteおよびExecutedから呼び出します)
private Object GetCommandParameter() {
Object parameter = null;
UIElement element = FocusManager.GetFocusedElement(this) as UIElement;
if (element != null) {
parameter = AttachableParameter.GetParameter(element as DependencyObject);
}
return parameter;
}
これはハックですが、キーバインディングから起動されるバインディングのコマンドパラメーターを取得する別の方法は見つかりませんでした。(もっと良い方法を知りたいです)